我一直在使用Core Data,因为它是针对iOS发布的,但是我无法弄清楚我的一个实体的insertNewObjectForEntityForName方法调用是怎么回事。调用该方法时,它只返回一个 nil 对象,并且不会抛出异常。
以下是代码:
@try {
self.observation = [NSEntityDescription insertNewObjectForEntityForName:@"Observation" inManagedObjectContext:moc];
NSLog(@"No exception on insert");
}
@catch (NSException *exception) {
NSLog(@"Insert exception - %@", exception.description);
}
NSLog(@"observation: %@", self.observation ? self.observation.description : @"nil");
这是输出:
2012-10-19 10:16:08.749 Track[63779:c07] No exception on insert
2012-10-19 10:16:08.750 Track[63779:c07] observation: nil
我可以在我的ERD中的所有其他实体上执行插入操作。只是这个嘲笑(双关语)我。
答案 0 :(得分:1)
(Xcode 7.2 Swift项目)重命名实体后,我的数据模型变得混乱,并在执行insertNewObjectForEntityForName
时开始返回nil个对象。以下是我为解决这个问题所做的三件事:
我首先使用了@PhillipMills的建议:po mainQueueContext.persistentStoreCoordinator?.managedObjectModel
在输出中,我看到“managedObjectClassName”是带有项目前缀的旧实体/类名。
... NewEntityName =“(< NSEntityDescription:0x7f9773783440>)名称DetectedData,managedObjectClassName MyProject.OldEntityName,...
为了尝试解决此问题,我删除并重新创建了实体。但是这也在插入时返回了nil个对象。我查看了界面构建器,发现Class字段是空白的。我设置了类名来解决这个问题。
缺少objc()声明:
import Foundation
import CoreData
class NewEntityName: NSManagedObject {
// Insert code here to add functionality to your managed object subclass
}
修正版:
import Foundation
import CoreData
@objc(NewEntityName) //THIS WAS MISSING
class NewEntityName: NSManagedObject {
// Insert code here to add functionality to your managed object subclass
}
答案 1 :(得分:0)
没有看到任何错误,除非你在某些或所有情况下覆盖-description以返回@“nil” - 我会怀疑.... :) ps,如果你在try中记录observe.description怎么办?方框?
修改强> 将此评论发布为答案,以便您接受。不记录nil对象打印出来(null)?事实上,你必须在NSManagedObject的描述方法中字面上记录@“nil”。没有? ;)
或者,这可能是一些错误问题吗?在ternary子句中记录不同的文字而不是.description(log @“是”:@“No”)来检查它是否是属性问题。