我有一台设备手机运行ios 6.0.1,我希望在我的设备中获得所有联系人 . 我尝试将iphone用于IOS 5.1,6.1.3并且它的工作正常 . 不幸的是,当它运行ios 6.0.1时,数据为空
这是我的代码:
if([[[[UIDevice currentDevice] systemVersion] floatValue]> 5.2){ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL,NULL);
if(ABAddressBookGetAuthorizationStatus()== kABAuthorizationStatusNotDetermined)
{
ABAddressBookRequestAccessWithCompletion(addressBookRef,
^(bool授予,CFErrorRef错误){
如果(授予)
[self loadContact];
});
}
else if(ABAddressBookGetAuthorizationStatus()== kABAuthorizationStatusAuthorized)
{
[self loadContact];
}
}
其他
{
[self loadContact];
}
- (void)loadContact {ABAddressBookRef addressBooks = ABAddressBookCreate();
allPeople =(__ bridge NSArray *)(ABAddressBookCopyArrayOfAllPeople(addressBooks));
peopleCount = ABAddressBookGetPersonCount(addressBooks); }
我不知道,为什么它不适用于ios 6.0.1
我找到this link,并且这样做,但我的设备没有数据 .
你能帮我解决这个问题吗?
1 回答
您的代码中最大的问题是您需要将引用“addressBookRef”传递给“loadContact”方法 . “ABAddressBookCreate”不适用于iOS6 - 您需要使用ABAddressBookRequestAccessWithCompletion创建的那个 .
顺便说一句 . 而不是检查iOS版本更好地使用它来确定您是否需要请求权限 . 这是我正在使用的代码 - 随意使用它:
我将这些函数封装到类中,委托是:
要使用它,我建议在另一个线程上调用它来阻止UI并显示进度(当你有5000个条目时需要一段时间):