OSX CoreData:仅针对某些实体的问题:+entityForName:在此模型中找不到名为“myEntity”的实体

Posted

技术标签:

【中文标题】OSX CoreData:仅针对某些实体的问题:+entityForName:在此模型中找不到名为“myEntity”的实体【英文标题】:OSX CoreData: issue only for some entities: +entityForName: could not locate an entity named 'myEntity' in this model 【发布时间】:2014-07-10 12:27:51 【问题描述】:

这几天我一直在努力解决这个问题:(

给定:

println("\(context)")
if context == nil 
    println("context is nil")


let boardEntity: NSManagedObject = NSEntityDescription.insertNewObjectForEntityForName("Board", inManagedObjectContext: context) as NSManagedObject

let cardQueueEntity: NSManagedObject = NSEntityDescription.insertNewObjectForEntityForName("CardQueue", inManagedObjectContext: context) as NSManagedObject

boardEntity 保存良好。我什至直接在sql文件中验证了这一点。

cardQueueEntity 产生以下错误: +entityForName: could not locate an entity named 'CardQueue' in this model.

println("(context)") 显示<NSManagedObjectContext: 0x6080001dfd10> 我已经检查了三倍的名称是否与模型匹配 设置断点表明崩溃发生在 cardQueueEntity 声明处 我查看了 sql 文件以验证实体名称是否也相同 我已经手动删除了我的 sqllite 文件(在 /library/containers/..)来强制重建数据库,但结果是一样的 我参考了+entityForName: could not locate an entity named 'Dogs' in this model. 和其他人,但找不到解决方案 如果我注释掉板或更改顺序,板仍然有效,而 cardQueue 不可用。 println("\(context.persistentStoreCoordinator.managedObjectModel.entitiesByName)") 显示所有实体。

这是我正在使用的核心数据堆栈(基于http://www.cimgf.com/2014/06/08/the-core-data-stack-in-swift),

@lazy var context: NSManagedObjectContext = 
    let modelURL = NSBundle.mainBundle().URLForResource("Tello", withExtension: "momd")
    let mom = NSManagedObjectModel(contentsOfURL: modelURL)

    let psc = NSPersistentStoreCoordinator(managedObjectModel: mom)

    let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
    let storeURL = (urls[urls.endIndex-1]).URLByAppendingPathComponent("Tello.sqlite")

    var error: NSError? = nil

    var store = psc.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: storeURL, options: nil, error: &error)
    if (store == nil) 
        println("Failed to load store")
    

    var managedObjectContext = NSManagedObjectContext()
    managedObjectContext.persistentStoreCoordinator = psc

    return managedObjectContext
()

但我也遇到了与默认 Apple 堆栈相同的问题。

谢谢!!

【问题讨论】:

【参考方案1】:

如果您遇到同样的问题,这可能对您有帮助,也可能无济于事,但为我解决的问题是将我的 mac 升级到 Yosemite beta 并从 XCode beta1 升级到 beta3。

我不能说这两件事中哪一个做到了 - XCode 最有意义,所以先试试吧。

(在 Mavericks 编辑部署目标以明确构建 10.9 并没有解决我的问题。)

【讨论】:

以上是关于OSX CoreData:仅针对某些实体的问题:+entityForName:在此模型中找不到名为“myEntity”的实体的主要内容,如果未能解决你的问题,请参考以下文章

CoreData - 在实体上有许多关系时的性能

CoreData:NSManagedObject 不响应用户定义的消息

实体具有某些共同属性时的模型结构

CoreData 性能重复实体与属性

CoreData 和 setPropertiesToFetch 只返回 1 个实体

CoreData:不能轻量级迁移删除实体“没有这样的表”