2014-09-09 3 views
1

У меня есть этот код:Создание MagicalRecord не сохранит новый объект данных.

HLMReferenceData *referenceDataObj = [HLMReferenceData createEntity]; 
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext){ 
    HLMReferenceData *localReferenceData = [referenceDataObj inContext:localContext]; 
    // Setup localReferenceData here .... 
} 
        completion:NULL]; 

Насколько я могу видеть, что это точно в соответствии с примерами в сети, как создать новую запись с помощью MagicalRecord. Однако это не сработает. Я получаю это в журнале:

... +[MagicalRecord(ErrorHandling) defaultErrorHandler:](0x3abdc4) Error Message: The operation couldn’t be completed. (Cocoa error 133000.) 
... +[MagicalRecord(ErrorHandling) defaultErrorHandler:](0x3abdc4) Error Domain: NSCocoaErrorDomain 
... +[MagicalRecord(ErrorHandling) defaultErrorHandler:](0x3abdc4) Recovery Suggestion: (null) 
... -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x954b680) NO CHANGES IN ** UNNAMED ** CONTEXT - NOT SAVING 

Я порылся в кодовом магических записях и ошибка возникает, когда метод inContext: называется. В результате он возвращает нулевой объект. Я искал в Интернете и не смог понять, что не так. Класс HLMReferenceData сопоставляется с одной таблицей в модели данных без ссылок на другие таблицы. Все поля в классе заполняются.

Я в затруднении.

+0

Вы используете MR стенографии? –

ответ

2

inContext: возвращает нуль, потому что ваш объект был создан/вставлен во внешний контекст и никогда не был сохранен. Поэтому он еще не доступен в localContext. (Более конкретно, InContext: будет пытаться искать объект, используя временную ObjectId, и он не нашел.) Вы должны создать/вставить объект внутри блока сохранения, например:

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext){ 
    HLMReferenceData *referenceDataObj = [HLMReferenceData createEntityInContext:localContext]; 
    referenceDataObj.name = @"foo"; 
    // Continue setting up referenceDataObj here .... 
} completion: NULL]; 

Вы можете см. очень похожий пример в github docs Magical Record, в разделе «Сохранение». См 'Changes для сохранения в MagicalRecord 2.3.0' Подраздел

https://github.com/magicalpanda/MagicalRecord/blob/develop/Docs/Saving.md

+0

Хм, это работает для некоторых моих очень простых случаев. Но это не работает для других. Мне нужно сделать '[MyClass createEntity]', использовать этот объект, а затем сохранить его позже в другом классе. Какие-либо предложения? – drekka

+0

Я не совсем уверен, что вы пытаетесь сделать, или что вы подразумеваете под «сохранить его позже в другом классе». Вы хотите сохранить его в другом контексте? вы можете отложить сохранение до тех пор, пока хотите, но в конце вам нужно будет сохранить любые вставки или изменения в контексте, в котором они произошли. несохраненные вставки и изменения не будут отображаться в разных контекстах. –

+0

Это проблема. Разработчики, создающие объекты, не знают о контекстах. В конце концов я просто прекратил использование saveWithBlock и изменил его на сохранение на постоянном уровне хранилища. Решила все. – drekka

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