在UITableView中加载时,电话簿电子邮件属性返回nil

时间:2011-08-13 05:40:55

标签: iphone

在我的示例应用程序中。我必须从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中使用相同的方法时。它没有返回电子邮件地址。

有没有人见过这样的问题?

1 个答案:

答案 0 :(得分:0)

我想,当您从peopleMutable访问tableView: cellForRowAtIndexPath:时,[tableView reloadData]为零,因为您稍后加载数据然后tableView重新加载其数据。

填充peopleMutable数组后调用{{1}}。