我在项目中使用核心数据,并且在iOS 8上的fetch ...中断,但在任何其他iOS版本上都没有。我得到的错误是:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath myId not found in entity <NSSQLEntity Entity id=1>'
我根本不理解这一点,myId
一直存在,并且适用于iOS 9和10.我已经尝试删除应用并重新安装,但是徒劳无功。它发生在模拟器和设备上。
这是我执行fetch的代码
static func fetch(_ sortDescriptors: [NSSortDescriptor]?, predicate: NSPredicate?, entityName: String) -> [NSManagedObject] {
let managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).managedObjectContext
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)
fetchRequest.sortDescriptors = sortDescriptors
fetchRequest.predicate = predicate
var fetchedObjects = [NSManagedObject]()
do {
fetchedObjects = try managedObjectContext.fetch(fetchRequest) as! [NSManagedObject]
} catch {
log.error("error")
}
return fetchedObjects
}
它在do
- 语句内部中断并且不会抛出错误。在iOS 9.0+上它也不会抛出任何错误。代码是使用Swift 3编写的。