Вопрос по core-data, magicalrecord, ios, ios5, ios4 – Волшебная запись не сохраняется

8

Я использую Волшебную запись:https://github.com/magicalpanda/MagicalRecord

Я пытаюсь сохранить записи, полученные с моего веб-сайта, в базу данных sqllite, используя Magical Record и Core Data, но получаю сообщение об ошибке:

MR_saveWithErrorCallback:](0xaaa6bd0) NO CHANGES IN CONTEXT  on *** BACKGROUND THREAD *** - NOT SAVING

Вот код:

             for(int i = 0; i < count; i += 1)
             {
                 // results  = array of all services from site
                 NSDictionary * result = [results objectAtIndex: i];

                 NSNumber * sid = @([[result objectForKey: @"id"] intValue]);
                 NSNumber * parent = @([[result objectForKey: @"parent"] intValue]);
                 Service * service  = [Service createEntity];

                 NSString * image = [NSString stringWithFormat: @"%@", [result objectForKey: @"image"]];

                 NSString * name  = [NSString stringWithFormat: @"%@", [result objectForKey: @"name"]];
                 NSString * machine_name  = [NSString stringWithFormat: @"%@", [result objectForKey: @"machine_name"]];


                 [service setDate: [NSDate date]];
                 [service setSid: sid];
                 [service setName: name];

                 [service setImage: image];
                 [service setParent: parent];
                 [service setMachine_name: machine_name];


                 [[NSManagedObjectContext defaultContext] saveNestedContexts];

Ваш Ответ

4   ответа
1

В моем быстром проекте я делаю:

MagicalRecord.setupCoreDataStack()

Итак, мне нужно сделать следующее для сохранения на диск:

NSManagedObjectContext.MR_defaultContext().MR_saveToPersistentStoreAndWait()
0

переместить линию

[[NSManagedObjectContext defaultContext] saveNestedContexts];

за пределами цикла, это сработало для меня

5

saveInBackgroundWithBlock: служебный метод?

Если нет, вы можете попробовать что-то вроде кода ниже. Обратите внимание, что этоВы сохраните все свои объекты за один раз в фоновом режиме, а затем выполните блок завершения в главном потоке:

[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){
    Service *service = [Service createInContext:localContext];

    ... set values ...
} completion:^{
    ...
}];

Кроме этого, вы можете увидеть, если[[NSManagedObjectContext defaultContext] hasChanges] возвращает ДА, чтобы проверить,s проблема с сохранением или самой сущностью.

7

что вы не сохраняете правильный контекст. Если вы посмотрите на источник,[Service createEntity] создает ManagedObject в контексте для текущего потока. Не в defaultContext.

Так что вам нужно сделать, а не[[NSManagedObjectContext defaultContext] saveNestedContexts]Вы должны сохранить контекст для текущего потока (то есть контекст, в котором был создан ManagedObject). Так что код должен быть[[NSManagedObjectContext MR_contextForCurrentThread]

Похожие вопросы