在我的示例应用程序中。我必须从iPhone获取所有联系人并显示每个联系人的firstName,lastName,companyName和电子邮件地址。
我已经编写了Apple参考指南中的代码,但在UITableView中加载联系人时遇到了一些问题。
我已使用以下代码检索了所有联系人:
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFMutableArrayRef peopleMutable = CFArrayCreateMutableCopy(
kCFAllocatorDefault,
CFArrayGetCount(people),
people
);
CFArraySortValues(
peopleMutable,
CFRangeMake(0, CFArrayGetCount(peopleMutable)),
(CFComparatorFunction) ABPersonComparePeopleByName,
(void*) ABPersonGetSortOrdering()
);
CFRelease(addressBook);
CFRelease(people);
CFRelease(peopleMutable);
ABRecordRef record = [peopleMutable objectAtIndex:i];
ABMultiValueRef emails = (ABMultiValueRef) ABRecordCopyValue(record, kABPersonEmailProperty);
NSLog(@"ABMultiValueGetCount %d",ABMultiValueGetCount(emails));
if(ABMultiValueGetCount(emails))
emailID = (NSString *)ABMultiValueCopyValueAtIndex(emails, 0);
当我在viewdidAppear
中使用这行代码时,它运行正常。但是当我在UITableViewDelegate方法- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
中使用相同的方法时。它没有返回电子邮件地址。
有没有人见过这样的问题?
答案 0 :(得分:0)
我想,当您从peopleMutable
访问tableView: cellForRowAtIndexPath:
时,[tableView reloadData]
为零,因为您稍后加载数据然后tableView重新加载其数据。
填充peopleMutable
数组后调用{{1}}。