【发布时间】:2013-07-08 16:32:22
【问题描述】:
我在使用 ABAddressBook 库的 iOS 应用程序中看到了非常奇怪的行为。想知道是否有人可以让我深入了解背景中发生的事情,或者我是否有我看不到的逻辑错误。
长话短说,我正在制作一个 VOIP 应用程序,该应用程序严重依赖于导入用户的联系人。我保留了这些也与推送通知一起使用的在线备份。
由于它们在手机上被修改,我需要向服务器发送更新请求以保持它们的准确性。问题是许多用户设备经常以随机的时间间隔向服务器发送大量联系人的垃圾邮件。一天会是 50+ 个联系人,5 分钟后又是 10 个,然后一个月后会更新一个。我问过几个朋友的用户,他们不记得一夜之间修改了一半的通讯录。
我的代码非常简单,每次需要向服务器发送更新时,我都会存储一个NSDate,例如添加、修改或删除。我知道有一个回调会在地址簿更新时触发,但这需要始终在内存中保留对地址簿的引用。我做了一些测试,如果应用程序崩溃或用户终止应用程序,我会丢失任何更新。鉴于它是一个后台运行的 VOIP 应用程序,我觉得人们可能会在某个场合杀死它以节省电池或其他任何东西。因此,出于这个原因,我遍历所有联系人检查kABPersonModificationDateProperty 属性与我记录的最后一个NSDate。如果修改后更新,我会开始更新,就像这样。
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
NSDate *lastChecked = [dateFormatter dateFromString:[PListData readStringFromFile:@"lastContactsArchive"]];
CFDateRef modifyDate = ABRecordCopyValue(ref, kABPersonModificationDateProperty);
...
...
else if ([(__bridge NSDate*)modifyDate compare:lastChecked]==NSOrderedDescending) // if modified after last check, create new contact and update
{
...
}
有什么我遗漏的吗,修改日期是否仅在更改姓名/电话号码/电子邮件等时更新?例如,当 iCloud 同步时它们是否被修改?如果他们打电话给对方,计数器会更新吗?等等。
我已经尝试在 3 部手机上进行调试,并且都表现得如我所料。我真的在这里画了一个空白,服务器对我不满意,所以任何帮助都将不胜感激。
【问题讨论】:
-
还有问题吗?
-
不幸的是,我正在进行的项目已被推迟一分钟,因此无法进一步研究。但是,是的,花了 2 天时间搜索,似乎无法获得任何其他信息,也无法解释为什么代码会这样做。努力相信它会这样做,因为这听起来很荒谬
-
对于反对者,请解释为什么你反对我的问题。它被投票了几次,所以我认为你应该有充分的理由这样做,愿意分享吗?
-
每当我更改 iPhone 的语言时,我都面临着同样的问题,即修改日期正在更新,但我还没有更新我的通讯录,有什么建议可以解决这个问题
-
@Talha 抱歉,该项目已取消,从未找到解决方案。除了检查联系人的所有详细信息以查看数据是否更改之外,似乎无法修复
标签: ios objective-c abaddressbook