我正在寫一個非常簡單的應用程序來跟蹤,存儲和組織從iTunes和RottenTomatoes饋入的電影。我把電影放在一個大的背上,通常一次約150部電影。用戶然後可以查看供稿並將電影添加到自定義列表。iCloud,iOS 7中的Web服務的核心數據和數據
我遇到的問題是從網絡中提取數據並與iCloud同步生成電影副本。
我一直在考慮將電影饋送到本地存儲(從iCloud移除),然後在單獨的iCloud核心數據存儲中創建列表和其他用戶值,或者甚至使用iCloud鍵值存儲(儘管保存電影列表可能會很粗糙)。
這是我第一個使用iCloud的應用程序,所以我使用this objc.io article的一些樣板。我做了一些修改,因爲我的Web同步使用後臺NSManagedObjectContext來完成這項工作。後臺MOC保存,然後我的主要MOC合併更改。UI主要是NSFetchedResultsControllers,因此整個系統真正無縫地工作。
這裏是處理iCloud的NSNotifications
// happens when the main MOC saves
- (void)managedObjectContextDidSaveNotification:(NSNotification *)notification {
@synchronized(self) {
NSManagedObjectContext *moc = self.backgroundManagedObjectContext;
[moc performBlock:^{
[moc mergeChangesFromContextDidSaveNotification:notification];
}];
}
}
// happens when the bg MOC saves
- (void)backgroundManagedObjectContextDidSaveNotification:(NSNotification *)notification {
@synchronized(self) {
NSManagedObjectContext *moc = self.managedObjectContext;
[moc performBlock:^{
[moc mergeChangesFromContextDidSaveNotification:notification];
}];
}
}
- (void)persistentStoreDidImportUbiquitousContentChanges:(NSNotification *)notification {
@synchronized(self) {
NSManagedObjectContext *moc = self.managedObjectContext;
[moc performBlock:^{
[moc mergeChangesFromContextDidSaveNotification:notification];
}];
}
}
- (void)storesWillChange:(NSNotification *)notification {
NSManagedObjectContext *moc = self.managedObjectContext;
[moc performBlockAndWait:^{
NSError *error = nil;
if ([moc hasChanges] && [moc save:&error]) {
DDLogInfo(@"MOC saved succesfully");
}
else {
DDLogError(@"Error saving MOC: %@",error);
}
}];
}
- (void)storesDidChange:(NSNotification *)notification {}
我本來以爲我可以在一次的iCloud完成合並更改添加一些邏輯一些代碼,但看起來不是很可靠的,因爲我可以在一個循環結束設備之間的變化。
有關如何使這成爲可能的任何想法?我確信以前人們已經做到了這一點,但我找不到任何有用的資源。
因此,排序,將避免任何一種「刪除週期」,其中一個設備刪除dup a,其他設備刪除dup b,他們同步a&b,然後重複?理論上,這兩種設備都會刪除重複的? – rnystrom
是的。這個想法是,他們都應該刪除相同的東西。如果發生這種情況,應該不會有任何乒乓或數據丟失。 –