Sas*_*vus 3 addressbook abrecord ios
我正在使用这个简单的代码来获取ios 7中地址簿的所有联系人.我的地址中有155个联系人.当我记录人们的姓名时,我从我的地址簿中获取了34个正确的名字(显然是随机的),15个名称为null,然后在第50个项目上,一个糟糕的访问崩溃就行了
NSString *firstNames = (__bridge NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty)
Run Code Online (Sandbox Code Playgroud)
我试过登录姓氏,或图像没有变化.我试图避免对null对象进行ABRecordCopyValue而不进行任何更改.我尝试在项目> 50上执行ABRecordCopyValue,并在50到150的项目上得到相同的结果.我做错了什么?什么ABRecordCopyValue可以返回正确的值旁边和null?
+(NSArray *)getAllContactsAddress
{
CFErrorRef *error = nil;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
// SUPPOSE access has been granted
BOOL accessGranted = true;
if (accessGranted) {
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook);
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByFirstName);
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
NSMutableArray* items = [NSMutableArray arrayWithCapacity:nPeople];
for (int i = 0; i < nPeople; i++)
{
ContactsData *contacts = [ContactsData new];
ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);
NSString *firstNames = (__bridge NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);
NSLog(@"%@",firstNames);
}
}
Run Code Online (Sandbox Code Playgroud)
我认为 (我实际上很确定)问题是nPeople错误的值并且与allPeople数组中的条目数不匹配,就像你想象的那样.nPeople当你CFArray已经提供了一种直接的方法时,你已经使用了一种奇怪的获取方法.
我认为这会起作用:
CFIndex nPeople = CFArrayGetCount(allPeople);
Run Code Online (Sandbox Code Playgroud)
您还需要在使用之前检查是否person为非NULL:
ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);
NSAssert(person, @"Non-person detected!");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1874 次 |
| 最近记录: |