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>";
})
答案 0 :(得分:7)
从被抛出的例外情况来看,您似乎正在尝试迭代一个集合,而是project.scribbles返回一个集合,它返回一个Scribble实例。
这让我觉得你的关系是建立在一个人的关系之上的。在数据建模器中。确保您已将关系设置为“很多”。你可以通过选择关系来做到这一点,并且数据模型检查器中会有一个名为type的选项 - 它被设置为&#39;到一个&#39;默认情况下。