NSManagedObjectContext сохранить не удалось, но возвращает нулевую ошибку

Я разрабатываю приложение 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] не равно нулю, и я убедился, что код выполняется в основном потоке.

У меня есть отношение, которое не задано в MyObject *object, но помечено как optional в модели данных.

Любая идея, что может привести к сбою этой простой операции? У меня есть другие объекты, которые отлично сохраняются, но в этом конкретном случае происходит сбой.

Примечание. Я использую OS X Mavericks DP 8.


person David Ganster    schedule 25.09.2013    source источник


Ответы (1)


В конце концов, это было мое неправильное понимание MagicalRecord (и, возможно, CoreData) реализации методов save:: в случае отсутствия изменений в контексте ([context hasChanges] == NO) И родительском контексте (!!), сохранение будет прервано, и блок завершения вызывается с NO вместо successful и без объекта ошибки.

person David Ganster    schedule 25.09.2013