2013-09-25 3 views
0

Я разрабатываю приложение OS X, которое использует однопоточную модель Core Data без вложенных контекстов.NSManagedObjectContext save unsuccessful, но возвращает ошибку nil

Я создаю объекты в основном потоке в 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.

ответ

0

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

Смежные вопросы