我正在开发一个使用单线程Core Data模型而没有嵌套上下文的OS X应用程序。
我在defaultContext中的主线程上创建对象并尝试在创建后保存它们,但保存失败而不返回错误。我没有覆盖我的CoreData对象中的任何方法,但我使用的是最新版本的MagicalRecord。
失败的代码:
// pseudocode for createOrFetchWithData:inContext:
// fetch object from value in objectDict
// if(!object) create project in context
// [object importValuesForKeysWithObject:objectData] // MR method
// return object
MyObject *object = [MyObject createOrFetchWithData:objectData
inContext:[NSManagedObjectContext defaultContext]];
if(!object) return; // just to emphasise that I am sure the object is not nil.
[[NSManagedObjectContext defaultContext] saveOnlySelfWithCompletion:^(BOOL saveSuccessful, NSError *error) {
if(saveSuccessful) {
NSLog(@"yay");
} else {
NSLog(@"nay");
}
}];
[NSManagedObjectContext defaultContext]
的返回值不是nil,我已经验证代码是在主线程上执行的。
我的关系未在MyObject *object
中设置,但在数据模型中标记为optional
。
知道什么可能导致这个简单的操作失败?我有其他实体保存得很好,但这个特殊情况失败了。
注意:我正在运行OS X Mavericks DP 8。
答案 0 :(得分:0)
最后,我误解了MagicalRecord(可能还有CoreData)的save:
方法的实现:如果上下文([context hasChanges] == NO
)和父上下文没有变化(! !),保存将被中止,并且NO
使用successful
调用完成块,并且没有错误对象。