我正在编写一个用于编辑地址簿组的应用程序,它运行了很多更改,例如从书中删除所有联系人,添加所有联系人等等。问题是,当方法运行时,应用程序冻结了UI,我理解它是因为在主线程中运行而发生的,但是当我尝试在后台运行时,它会出现崩溃和组中错误更改等问题。谁能帮我解决这个问题?
我认为在很多时候运行它会阻止我的UI:
ABAddressBookSave(_addressBookRef, &cfError);
答案 0 :(得分:0)
第一个解决方案:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
(unsigned long)NULL), ^(void) {
<Write your method here>
});
第二个解决方案:
- (void)syncPersonOutOfAddressBook
{
[NSThread detachNewThreadSelector:@selector(syncContactsThread) toTarget:self withObject:nil];
}
-(void)syncContactsThread{
if([self getAccessPermission]){
ABAddressBookRef addressBook;
CFErrorRef error = nil;
addressBook = ABAddressBookCreateWithOptions(NULL,&error);
[self AddressBookUpdated:addressBook]; //this is method is to get address from device
}
}
了解更多信息click here。