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

Posted

技术标签:

【中文标题】核心数据 NSEntityDescription.entityForName 返回 nil,但 managedObjectModel.entities 列出了实体【英文标题】:Core Data NSEntityDescription.entityForName returns nil, but managedObjectModel.entities lists the entities 【发布时间】:2015-09-13 06:20:15 【问题描述】:

我正在尝试快速创建 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 不是零。我的数据模型文件的目标已正确设置为我的应用模块。

我正在使用 xCode 6.4。

感谢您的帮助!

【问题讨论】:

我从来没有在实体名称中加上一个点。虽然我没有看到文档说不要,但您是否尝试过删除它以及为什么需要它? 这就是问题所在。谢谢!我取出了模块名。 它是 entityForName,而不是 entityForClassName。您的实体名称是“Pages”。 【参考方案1】:

从实体名称中删除额外的 StoreTest.,您不需要它,并且该点可能会导致查找出现问题。

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

【讨论】:

以上是关于核心数据 NSEntityDescription.entityForName 返回 nil,但 managedObjectModel.entities 列出了实体的主要内容,如果未能解决你的问题,请参考以下文章

获取 NSEntityDescription 关系

无法将“UserInfoEntity!.Type”类型的值转换为预期的参数类型“NSEntityDescription”

核心数据 - NSFetchRequest 问题

问题理解核心数据基础

核心数据指导

覆盖核心数据值