我正在创建一个应用程序,在这个应用程序中,我曾经在一些重写操作中更新sqlite数据库中的联系人。每次用户登录时,我都会在用户允许的情况下从Addressbook of iPhone获取联系人,并将其插入主线程的数据库中。
我不想在用户登录时每次都将iphone联系人插入到数据库中,因为它超过登录时间并且这也不是一个好方法,如果没有修改iPhone的地址簿,那么每个登录名都会发生数据库插入
这就是我提取联系人的方式
NSArray *thePeople = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(_addressBook);
NSMutableArray * _allPeoplesDictArr = [NSMutableArray array];
for (id person in thePeople)
{
ABMultiValueRef phones =(__bridge ABMultiValueRef)((__bridge NSString*)ABRecordCopyValue((__bridge ABRecordRef)(person), kABPersonPhoneProperty));
NSString* name = (__bridge NSString *)ABRecordCopyCompositeName((__bridge ABRecordRef)(person));
ABRecordRef record = (__bridge ABRecordRef)[thePeople objectAtIndex:loop];
if(ABRecordGetRecordType(record) == kABPersonType) // this check execute if it is person group
{
ABRecordID recordId = ABRecordGetRecordID(record); // get record id from address book record
recordIdString = [NSString stringWithFormat:@"%d",recordId]; // get record id string from record id
NSDate *modificationDate = (__bridge NSDate*) ABRecordCopyValue(record, kABPersonModificationDateProperty);
NSLog(@"modificationDate %@",modificationDate);
firstNameString = (__bridge NSString*)ABRecordCopyValue(record,kABPersonFirstNameProperty); // fetch contact first name from address book
lastNameString = (__bridge NSString*)ABRecordCopyValue(record,kABPersonLastNameProperty); // fetch contact last
NSLog(@"%@",firstNameString);
}
}
我正在修改日期并可以在数组中进行管理,但是当我退出或终止应用程序时,我怎么知道Array已被更改。
还有另一种方法,我可以匹配我的sqlite数据库中出现的插入或创建日期的每个联系人修改日期,但仍需要比较需要时间。
所以没有办法检查整个MD5CheckSum或Addressbook而不是比较每个联系人的创建日期和插入日期。如果修改了地址簿MD5CheckSum,则需要进行插入或更新,否则不要。
答案 0 :(得分:2)
你运气不好。如果您终止了您的应用程序,则没有公共API可以让您知道有更改。由于您没有其他方式可以了解更改,因此需要查看所有联系人。
确保在https://bugreport.apple.com打开功能请求,让他们知道您需要的API。在问题中发布错误报告编号,以便人们可以复制雷达。
从另一个答案的评论中,这里有一个重复的雷达: rdar:// 16154022 (感谢 oski555 )