3

アプリを Reminders.app と同期させたい。(私のアプリは Core Data を利用しています)

私はすでにプロトタイプを作成しており、動作していますが、考え抜くことができないバグがいくつかあります。

現在、私の同期アルゴリズムは次のようになっています。

1.EKEventStoreChangedNotification通知を聞いて、呼び出されたら同期する

2.まず、ローカルのカレンダーを反復処理しています。それらが Reminders.app に存在しない場合は、追加しています。

Reminders.app でカレンダーを削除してアプリに追加すると、Reminders.app に再度追加されるため、これはかなり悪い設計です。カレンダーが削除されたかどうかを知る方がはるかに優れています。

3.次に、Reminders.app から各カレンダーを反復処理し、このカレンダーがローカル レコードに存在しない場合は、それらを local.app に追加します。存在する場合は、タイトルを更新しています。

4.すべてのリマインダーを取得していますEKEventStore

5.すべてのローカル リマインダーを反復処理しており、それらが Reminders.app に存在しない場合は追加しています。

再び削除の問題 - カレンダーの削除と同じ話。

6.すべての Reminders.app リマインダーを反復処理しています。それらがアプリに存在しない場合は、local.app に追加しています。それらが存在する場合は、すべての値を更新しています。

削除でこの問題にぶつかるまで、それはすべて問題ありません。EKObjectそれには私を助けることができるいくつかの方法があることがわかりますが、それらを理解することはできません。これを適切に行うにはどうすればよいですか?最適化のためにできることはありますか?

4

2 に答える 2

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;

}
于 2013-05-12T16:53:50.987 に答える
0

date changed-プロパティまたは類似のものはありますか?これにより、物事が簡単になります。

理想的には、cal が削除されたという情報をどこかに保存します。次に、同期時に、(追加しようとしている) カレンダーが最近削除されたかどうかを確認できます。その場合は、ローカル カレンダーを削除し、削除対象の情報も削除できます。そのため、アイテムを削除して対応するアイテムと正常に同期しない限り、リストはクリーンなままです。

または、日付で実行したい場合は、lastSyncedDateandを比較できますcalendarModifiedDate(2 つの例のみ)。しかし、これはそれほど良い解決策ではありません。タイムゾーン、時間の変更、ユーザーと時間のやり取りなどを考慮する必要があります。設定が変更されました。

于 2013-05-14T23:49:47.130 に答える