2014-02-24 58 views
2

當本地商店更改爲iCloud Store時,我試圖接收消息。iCloud&CoreData:更改爲iCloud Store時的通知(使用現有iCloud數據首次發佈)

這是一個關鍵事件。因此,我的使用案例是一個新設備,從空店開始後接收iCloud Store。我想通知視圖以更新收到的內容。

我初始化我的管理對象上下文是這樣的:

[self.managedObjectContext.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType 
                    configuration:nil 
                      URL:self.storeURL 
                     options:@{ NSPersistentStoreUbiquitousContentNameKey : @"iCloudStore", [NSNumber numberWithBool:YES]: NSMigratePersistentStoresAutomaticallyOption, 
                        [NSNumber numberWithBool:YES]:NSInferMappingModelAutomaticallyOption} 
                      error:&error]; 

我的下一步是得到如下通知:

NSNotificationCenter *dc = [NSNotificationCenter defaultCenter]; 
[dc addObserver:self 
     selector:@selector(storesWillChange:) 
      name:NSPersistentStoreCoordinatorStoresWillChangeNotification 
     object:psc]; 

[dc addObserver:self 
     selector:@selector(storesDidChange:) 
      name:NSPersistentStoreCoordinatorStoresDidChangeNotification 
     object:psc]; 

[dc addObserver:self 
     selector:@selector(persistentStoreDidImportUbiquitousContentChanges:) 
      name:NSPersistentStoreDidImportUbiquitousContentChangesNotification 
     object:psc]; 

我認爲在name:NSPersistentStoreCoordinatorStoresDidChangeNotification實施更新的用戶界面應該做的事情。但不知何故,這似乎是我想要做的。

編輯: 與相關帖子在接受的答案,我可以解決我的問題

我檢查通知的UserDict在

這樣的:storesDidChange:

NSNumber *storeVal = [note.userInfo objectForKey:NSPersistentStoreUbiquitousTransitionTypeKey]; 
    if (storeVal.integerValue == NSPersistentStoreUbiquitousTransitionTypeInitialImportCompleted) { 
     //you are now in sync with iCloud 
     NSLog(@"On iCloud Store now"); 
     [self.delegate storeHasChanged]; 
    } 

回答

3

見下面鏈接瞭解處理核心數據存儲更改事件的說明。請注意,無論商店的狀態如何,第一個storesDidChange通知都是相同的。但是,如果這是你第一次創建了商店,有一個iCloud中儲存已經你會得到另一個storesDidChange通知,一旦現有的iCloud儲存初始導入已經完成。

的問題是你不知道是什麼情況發生之前,除非你知道你正在創建一個新的商店和商店中的iCloud已經存在。

不幸的是,正如我的解釋所指出的,本地商店和iCloud商店之間並沒有真正的切換 - 然而核心數據不知何故導入了sideLoad商店,此時您將獲得轉換類型4通知(第二個商店的更改)。

另外要注意,如果需要的話您的商店升級到一個新的模型版本也得到了一大堆storesDidChange通知...

http://ossh.com.au/design-and-technology/software-development/sample-library-style-ios-core-data-app-with-icloud-integration/sample-apps-explanations/handling-icloud-account-transitions/

你也可以想看看是怎麼示例應用程序做你正在嘗試做在同一鏈接 http://ossh.com.au/design-and-technology/software-development/sample-library-style-ios-core-data-app-with-icloud-integration/

+0

您的相關帖子確實幫了我很多!我用我的解決方案更新了我的問題 – arnoapp