我希望我的应用程序与Reminders.app同步。(我的应用程序使用核心数据)
我已经做了一个原型,它可以工作,但是有一些bug我想不通。
现在我的同步算法是这样的:
1.监听EKEventStoreChangedNotification通知并在调用sync时进行同步
2.首先,我迭代我的本地日历,如果它们不存在于Reminders.app中,我将添加它们。
这是一个非常糟糕的设计,因为如果我在Reminders.app中删除了一个日历,如果它被添加到我的应用程序中,它会被重新添加到Reminders.app中。如果知道日历是否已被删除,将会更好。
3.然后迭代来自Reminders.app的每个日历,如果这个日历不存在于我的本地记录中,我将它们添加到local.app中。如果它确实存在,那么我将更新它的标题。
4.我正在从我的EKEventStore获取所有提醒
5.我遍历了所有的本地提醒,如果它们不存在于Reminders.app中,我将添加它们。
再说一次删除的问题--与日历删除相同的故事。
6.我正在遍历所有的Reminders.app提醒,如果它们不存在于我的应用程序中,我会将它们添加到我的local.app中。如果它们确实存在,我会更新所有的值。
一切都很好,直到我遇到这个删除问题。我看到EKObject有一些方法可以帮助我,但我不能理解它们。我如何正确地做到这一点,有什么我可以做的优化?
发布于 2013-05-13 00:53:51
如何跟踪你在.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-15 07:49:47
你有date changed-property或类似的东西吗?这将使事情变得更容易。
理想情况下,您可以将呼叫被删除的信息保存在某个地方。然后-在同步时-你可以检查日历(你要添加的)最近是否被删除。如果是这种情况,您可以删除本地日历,也可以删除要删除的信息。因此,列表将保持干净,除非您删除了一个项目,并且该项目已成功同步到对应项目。
或者,如果你想按日期来做,你可以比较lastSyncedDate和calendarModifiedDate (只有两个例子)。但这并不是一个很好的解决方案。你必须考虑时区,时间变化和用户与时间的交互。设置已更改。
https://stackoverflow.com/questions/16508307
复制相似问题