NSManagedObjectContext保存失败,但返回nil错误

时间:2013-09-25 13:38:39

标签: macos core-data osx-mavericks

我正在开发一个使用单线程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。

1 个答案:

答案 0 :(得分:0)

最后,我误解了MagicalRecord(可能还有CoreData)的save:方法的实现:如果上下文([context hasChanges] == NO)和父上下文没有变化(! !),保存将被中止,并且NO使用successful调用完成块,并且没有错误对象。