2013-07-19 3 views
2

У меня проблема с использованием синхронизации CoreData + iCloud.NSPersistentStoreDidImportUbiquitousContentChangesNotification возвращает пусто

Иногда уведомление, NSPersistentStoreDidImportUbiquitousContentChangesNotification, возвращает пустой массив в Inserted, Updated и Deleted.

Если это уведомление вызывается при изменении, зачем возвращать пустое уведомление?

Спасибо !!!

код, который вызывает уведомление:

- (void)persistentStoreDidChange:(NSNotification*)notification 
{ 
    DLog(@"Change Detected! Notification: %@", notification.description) 

    [__managedObjectContext performBlockAndWait:^(void) 
    { 
     [__managedObjectContext mergeChangesFromContextDidSaveNotification:notification]; 

     for(id<CoreDataDelegate>delegate in _delegates) 
     { 
      if([delegate respondsToSelector:@selector(persistentStoreDidChange)]) 
       [delegate persistentStoreDidChange]; 

     } 
    }]; 
} 

ответ

3

Он просто делает это иногда. Это довольно незначительная проблема по сравнению со многими серьезными проблемами iCloud с Core Data.

Что мне нравится делать при получении этого уведомления, это сначала проверить вставленные, обновленные и удаленные объекты, а затем не продолжать процесс слияния, если вы не найдете что-то. Сделайте что-то вроде

NSDictionary *userInfo = [notification userInfo]; 
if (([userInfo objectForKey:NSInsertedObjectsKey] > 0) || 
    ([userInfo objectForKey:NSUpdatedObjectsKey] > 0) || 
    ([userInfo objectForKey:NSDeletedObjectsKey] > 0)) 
{ 
    // merge... 
} 
+0

Спасибо! Но почему иногда данные повреждаются? Я заметил, что когда приложение сохраняет больше времени (MOC save) и те же объекты на многих устройствах одновременно, данные будут повреждены ... Если приложение ограничивает количество MOC-файлов, вы считаете, что синхронизация выполняется штраф? –

+1

Трудно сказать, не более подробно. Если вы одновременно сохраняете одни и те же объекты на нескольких устройствах, возникает конфликт. Этот конфликт не может быть разрешен так, как вы ожидаете, что он будет разрешен. Если это вид коррупции, который вы видите, это именно то, как это работает. Если нет, задайте новый вопрос с более подробной информацией о том, что вы видите. –