3

我希望我的应用与 Reminders.app 同步。(我的应用程序使用核心数据)

我已经做了一个原型并且它可以工作,但是有一些我无法考虑的错误。

现在我的同步算法是这样的:

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

你有date changed-property 或类似的东西吗?这会让事情变得更容易。

理想情况下,您将某个 cal 被删除的信息保存在某处。然后 - 在同步时 - 您可以检查最近是否删除了日历(您将要添加)。如果是这种情况,您可以删除本地日历并删除要删除的信息。因此,除非您删除一个项目并且它已成功同步到对应项,否则该列表将保持干净。

或者如果你想按日期来做,你可以比较lastSyncedDatecalendarModifiedDate(只有两个例子)。但这不是一个很好的解决方案。您必须考虑时区、时间变化和用户与时间的交互,例如。设置更改。

于 2013-05-14T23:49:47.130 回答
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 回答