无法使用Swift访问Core Data中的一对多关系

时间:2014-06-20 14:13:54

标签: ios core-data swift

Swift让我最终尝试了IOS开发,但是我遇到了一些CoreData问题。我没有运气试图访问我的属性,这些属性映射到我的一对多关系。

我已经建立了这样的一对多关系:

@objc(Project)
class Project: NSManagedObject {

    @NSManaged var name:String

    @NSManaged var scribbles : Array<Scribble>

}

@objc(Scribble)
class Scribble: NSManagedObject {

    @NSManaged var notes:String

    @NSManaged var project:Project

}

我这样获取数据:

let request = NSFetchRequest(entityName: "Projects");
request.returnsObjectsAsFaults = false;
request.includesSubentities = true;

var results:NSArray = context.executeFetchRequest(request, error: nil);
for project in results
{
     let thisProject:Project = project as Project;
     projects.append(thisProject);
}

但每当我尝试使用for..in迭代一个项目的涂鸦时,我得到了这个例外:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Scribble count]: unrecognized selector sent to instance 

当我在我的项目对象上打印时,看起来我收到的东西,我只是不知道该怎么做。

<Project: 0xb48e010> (entity: Projects; id: 0xb48d340 <x-coredata://CDEFAC19-4D9E-426D-B0CC-EFFEE9053707/Projects/p3> ; data: {
name = Larry;
scribbles = "0xb48e7b0 <x-coredata://CDEFAC19-4D9E-426D-B0CC-EFFEE9053707/Scribbles/p3>";

})

1 个答案:

答案 0 :(得分:7)

从被抛出的例外情况来看,您似乎正在尝试迭代一个集合,而是project.scribbles返回一个集合,它返回一个Scribble实例。

这让我觉得你的关系是建立在一个人的关系之上的。在数据建模器中。确保您已将关系设置为“很多”。你可以通过选择关系来做到这一点,并且数据模型检查器中会有一个名为type的选项 - 它被设置为&#39;到一个&#39;默认情况下。