2013-05-12 142 views
3

我希望我的應用程序與Reminders.app同步。 (我的應用程序使用核心數據)Reminders.app雙向同步邏輯

我已經做了樣機和它的作品,但也有一些bug我想不通。

現在我的同步算法是這樣的:

1.聽來EKEventStoreChangedNotification通知,要求同步

2.First我遍歷我的本地日曆,如果它們不存在在Reminders.app我添加它們。

這是一個非常糟糕的設計,因爲如果我刪除Reminders.app日曆,如果它加入到我的應用程序,它就會再次加入到Reminders.app。知道日曆是否已被刪除會好得多。

3.Then我遍歷從Reminders.app每個日曆,如果該日曆不在我的本地記錄存在我將它們添加到我的local.app。如果它確實存在,那麼我正在更新它的標題。

和你爸從我EKEventStore

5.I'm遍歷,我所有的本地提醒,如果在Reminders.app不存在,我加入他們獲取所有的提醒。

再一次刪除問題 - 與日曆刪除相同的故事。

6.I'm通過遍歷所有Reminders.app提醒,如果在我的應用程序不存在,我在我的local.app添加。如果他們確實存在,我正在更新所有值。

這一切都很好,直到我遇到了刪除問題。我看到EKObject有一些方法可以幫助我,但我無法弄清楚它們。我如何正確地做到這一點,並且有什麼我可以做的優化?

回答

0

如何跟蹤您在.plist中安排的提醒? 因此,如果您的算法正在檢查.plist中缺少的內容,並且它顯示已經添加到.plist中但不在日曆中,則表示它已被刪除。

  //Create dictionary that keeps track of your reminders 

NSMutableDictionary *dictionary = [self remindersDictionary]; 

[dictionary setValue:local.fireDate forKey:title]; 
[dictionary setValue:@"TRUE" forKey:addedToReminders]; 

[plistDictionary setValue:dictionary forKey:@"reminders"]; 
[plistDictionary writeToFile:plistPath atomically:YES]; 

+(NSMutableDictionary *)remindersDictionary 
{ 
NSString *searchPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]; 

plistPath = [searchPath stringByAppendingPathComponent:@"settings.plist"]; 
plistDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath]; 
NSMutableDictionary *dictionary = [plistDictionary valueForKey:@"reminders"]; 

return dictionary; 

} 
+0

不,我已經在使用Core數據,我不需要另一個存儲。 – Devfly 2013-05-12 19:03:58

+0

如何添加一個屬性到您的提醒數據模型什麼跟蹤,如果它已被添加或不? – 2013-05-12 23:02:36

+0

仍然沒有解決我的問題,但感謝您的幫助! – Devfly 2013-05-13 22:50:52

0

你有一個類似的date changed - 屬性什麼的?這會讓事情變得更容易。

理想情況下,您保存某個cal被刪除的信息。然後 - 同步 - 您可以檢查日曆(您即將添加)是否最近被刪除。如果是這種情況,您可以刪除本地日曆並刪除信息以刪除。因此,列表保持乾淨,除非您刪除一個項目,並且它已成功同步到對應項目。

或者如果你想按日期做,你可以比較lastSyncedDatecalendarModifiedDate(只是兩個例子)。但這不是一個很好的解決方案。你必須考慮時間區域,時間變化和用戶與時間的相互作用。設置已更改。

+0

謝謝,但這正是我的Q - 如何保存日曆被刪除的信息?當我從Reminders.app中刪除時,當我的應用程序中刪除日曆時,我將它從我的持久性存儲中刪除,並從Reminders.app中刪除,並且沒關係。 – Devfly 2013-05-15 11:44:18

+0

你還可以有第三個日曆,代表'Reminders.app'的最後已知狀態。然後你有從提醒應用程序單向你的臨時cal。意思是如果'Reminders.app'缺少一個日曆,你將在你的臨時校準中刪除它,並且你有一個該日曆的刪除信息。而且你有從你的本地cal到臨時cal的單向。合併的差異,並採取刪除信息 – 2013-05-15 12:20:27

+0

我一直在思考這個附註,它似乎是一個矯枉過正,但它的智能建議。儘管如此,我仍然接受建議。 – Devfly 2013-05-17 17:29:42