NSEntityDescription仅在iPad Air 7.1上返回nil

时间:2014-07-23 18:18:09

标签: ios ipad core-data swift nsentitydescription

我最近一直在使用CoreData为我的应用程序。奇怪的是,它只在iPad Air上使用iOS 7.x崩溃。我已经在物理设备和iOS模拟器上运行,它永远不会在Air上崩溃,并且总是在其他地方运行。 (它不会在iPad Air iOS 8.0上崩溃)

崩溃发生在我的一个CoreData调用中,特别是

    var childEntity = NSEntityDescription.entityForName(ChildInSessionEntity, inManagedObjectContext: context)
    var parentEntity = NSEntityDescription.entityForName(ParentInSessionEntity, inManagedObjectContext: context)
    var newChild = ChildInSession(entity: childEntity, insertIntoManagedObjectContext: context)
    var newParent = ParentInSession(entity: parentEntity, insertIntoManagedObjectContext: context)

第一行不会返回nil,但第二行会返回,而在第4行我的应用程序崩溃。

这是一个非常奇怪的场景,因为在其他模拟器上它不会返回零值。

非常感谢任何帮助或建议

2 个答案:

答案 0 :(得分:1)

我想我和你有同样的问题。我发现第二次访问实体时会崩溃。由于这篇文章,我能够解决这个问题:http://stackanswers.com/questions/24440927/swift-core-data-on-ios7-device-entityforname-on-second-entity-is-nil

出于某种原因,您需要将实体名称作为NSString的实例传递,例如

// Rather than...
let entity = NSEntityDescription.entityForName("Entity", inManagedObjectContext: self.managedObjectContext!)

// Use this instead...
let entityName: NSString = "Entity"
let entity = NSEntityDescription.entityForName(entityName, inManagedObjectContext: self.managedObjectContext!)

如果您正在使用获取请求,则可以使用快捷方式:

let entityName: NSString = "Entity"
let fetchRequest = NSFetchRequest(entityName)

答案 1 :(得分:0)

我认为这是一个Bug,我只有iphone 5s(iOS 7.1)才有同样的问题。它意外地通过选择.xcdatamodeld并在“目标成员资格”下的“文件检查器”下删除了项目的检查。

enter image description here