【发布时间】:2013-12-12 22:04:13
【问题描述】:
我正在我的应用程序中获取 iPhone 联系人列表。我为此制作了一个示例应用程序并打印了它的值,它运行良好。
ABAddressBookRef ab=ABAddressBookCreate();
NSArray *arrTemp=(NSArray *)ABAddressBookCopyArrayOfAllPeople(ab);
NSLog(@"Array===%@",arrTemp);
NSMutableArray *arrContact=[[NSMutableArray alloc] init];
for (int i=0;i<[arrTemp count];i++)
{
NSMutableDictionary *dicContact=[[NSMutableDictionary alloc] init];
NSString *str=(NSString *) ABRecordCopyValue([arrTemp objectAtIndex:i], kABPersonFirstNameProperty);
@try
{
[dicContact setObject:str forKey:@"name"];
}
@catch (NSException * e) {
[dicContact release];
continue;
}
[arrContact addObject:dicContact];
[dicContact release];
}
NSLog(@"arrContact===%@",arrContact);
我还使用了另外一个代码来尝试另一种方式,它在示例中对我来说也很好。
CFErrorRef *error = NULL;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook);
for(int i = 0; i < numberOfPeople; i++) {
ABRecordRef person = CFArrayGetValueAtIndex( allPeople, i );
NSString *firstName = (NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty));
NSString *lastName = (NSString *)(ABRecordCopyValue(person, kABPersonLastNameProperty));
NSLog(@"Name:%@ %@", firstName, lastName);
ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
//NSLog(@"\n%@\n", [[UIDevice currentDevice] name]);
for (CFIndex i = 0; i < ABMultiValueGetCount(phoneNumbers); i++)
{
NSString *phoneNumber = (NSString *) ABMultiValueCopyValueAtIndex(phoneNumbers, i);
NSLog(@"phoneNumber======%@",phoneNumber);
}
}
它们在模拟器上运行良好,但是当我在设备上运行这些代码时,奇怪的是有时它们没有提供联系方式,但大多数时候它们运行良好。我的编码有什么问题吗?强>
当我在我的主应用程序中使用此演示代码时,此代码永远不会响应。我的设备是否需要为不同的应用程序执行任何权限或设置?
另外,当我使用 CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook); 来获取人数时,它给了我 11 的值,但我在模拟器上只使用了五个联系人,当我使用 CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); 然后我得到重复的值(以满足来自 5 个联系人的 11 个计数)。
谁能告诉我这里发生了什么事?
【问题讨论】:
标签: ios iphone xcode ios6 xcode5