核心数据NSEntityDescription.entityForName返回nil,但managedObjectModel.entities列出实体

时间:2015-09-13 06:20:15

标签: swift core-data nsentitydescription

我试图在swift中创建NSManagedObject的子类。我在模型编辑器中创建了两个名为Pages和Book的实体,并生成了它们的类文件。以下是两个类:

@objc(Pages)
class Pages: NSManagedObject {

    @NSManaged var pageNo: NSNumber

}

@objc(Book)
class Book: NSManagedObject {

    @NSManaged var pageCount: NSNumber
    @NSManaged var title: String
    @NSManaged var fetchLastPage: [Pages]

}

作为创建页面实例的测试,我在ViewDidLoad中编写了此代码,但由于无法在模型中找到实体,因此失败了:

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    let managedContext = appDelegate.managedObjectContext!

    var pages = NSEntityDescription.insertNewObjectForEntityForName("StoreTest.Pages", inManagedObjectContext: managedContext)

' StoreTest'是我的应用程序的名称,它也在两个实体的模型编辑器中设置。要查看发生了什么,我在创建实例之前添加了此代码:

    var pagesEntity = NSEntityDescription.entityForName("StoreTest.Pages", inManagedObjectContext: managedContext)
    println("pagesEntity = \(pagesEntity)")

    var ents = managedContext.persistentStoreCoordinator!.managedObjectModel.entities
    println("entities = \(ents)")

NSEntityDescription.entityForName调用返回nil,但对managedObjectModel.entities的调用返回两个实体。

我确定没有拼写问题。此外,managedObject不是nil。我的数据模型文件的目标已正确设置为我的app模块。

我正在使用xCode 6.4。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

从实体名称中删除其他StoreTest.,您不需要它,而点可能会导致查找出现问题。

实际上可能只是因为你对实体名称是什么感到困惑,它在模型中设置然后你设置了类名(通常与实体名称相同)。