5

自从它为 iOS 发布以来,我一直在使用 Core Data,但我无法弄清楚我的一个实体的 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 中的所有其他实体上执行插入。正是这个在嘲笑(双关语)我。

4

2 回答 2

2

(Xcode 7.2 Swift 项目)重命名实体后,我的数据模型变得混乱并在执行时开始返回 nil 对象insertNewObjectForEntityForName。以下是我为解决此问题所做的三件事:

  1. 我首先使用了@PhillipMills 的建议:po mainQueueContext.persistentStoreCoordinator?.managedObjectModel 在输出中我看到“managedObjectClassName”是带有项目前缀的旧实体/类名称。

    ... NewEntityName = "(< NSEntityDescription: 0x7f9773783440>) 名称 DetectedData, managedObjectClassName MyProject.OldEntityName, ...

  2. 为了解决这个问题,我删除并重新创建了实体。但这在插入时也返回了 nil 对象。我查看了界面生成器,发现 Class 字段是空白的。我设置了类名来解决这个问题。 Xcode 数据模型检查器

  3. 在此过程中的某个时刻,Xcode 生成的 Swift 文件存在第三个问题:

缺少 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
}
于 2016-01-21T18:48:19.683 回答
0

看不到任何错误,除非您在某些或所有情况下覆盖 -description 以返回 @"nil" - 我会怀疑.... :) ps,如果您在 try 块中记录 observation.description 会怎样?

编辑 将此评论作为答案发布,以便您接受。不会打印出 nil 对象(null)吗?因此,事实上,您必须在 NSManagedObject 的描述方法中逐字记录 @"nil"。不?;)

或者,这可能是一些故障问题吗?在三元子句中记录不同的文字而不是 .description (log @"Yes" : @"No") 以检查它是否是属性问题。

于 2012-10-19T17:15:35.567 回答