我希望我的应用与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
有一些方法可以帮助我,但我无法弄明白。我该如何正确地做到这一点,我可以做些什么来优化?
答案 0 :(得分: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;
}
答案 1 :(得分:0)
你有date changed
- 属性或类似的东西吗?这会让事情变得更容易。
理想情况下,您可以保存在某处删除cal的信息。然后 - 同步 - 您可以检查日历(您即将添加)是否最近被删除。如果是这种情况,您可以删除本地日历并删除要删除的信息。因此,列表保持清洁,除非您删除项目并且它已成功同步到对应项。
或者如果您想按日期进行,可以比较lastSyncedDate
和calendarModifiedDate
(仅举两个例子)。但这不是一个很好的解决方案。你必须考虑时区,时间变化和用户与时间的互动,例如。设置已更改。