2011-08-13 7 views
0

サンプルアプリケーションでは。私はiPhoneからすべての連絡先を取得し、それぞれのfirstName、lastName、companyName、およびemailアドレスを表示する必要があります。UITableViewでロード中に電話帳の電子メールのプロパティが返されない場合

私は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

tableView: cellForRowAtIndexPath:からアクセスすると、peopleMutableはゼロであると仮定します。後でデータを読み込んでからtableViewを再読み込みするためです。

peopleMutable配列を移植した後に[tableView reloadData]を呼び出します。

+0

はい私は試みました。しかし、電子メールを取得しませんでした。もう一つの情報は、ファーストネーム、ラストネーム、会社名です。すべてがテーブルビューに正しく表示されます。 – karan

関連する問題