2012-04-15 13 views
4

私は2つのtableViewControllerを持っています。最初のものには連絡先のリストがあります。もう一つは詳細な人の情報を示しています。iOSが人の画像を取得できない

第tableViewController

ABAddressBookRef addressBook = ABAddressBookCreate(); 
ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook); 
NSArray *allPeople = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source,kABPersonSortByFirstName); 
for (int i = 0; i < [allPeople count]; i++) 
{ 
    ... 
    contactClass = [[ContactClass alloc] initWithName:name surName:surName manID:[allPeople objectAtIndex:i]]; 
    ... 
} 

第tableViewControllerのコード

ABRecordRef person = (__bridge ABRecordRef)contactClass.manID; 
BOOL isHasImage = ABPersonHasImageData(person); 

可変isHasImageのchunckのコードのチャンクは、接触がアバターを持っている場合でも、常に偽です。私は最初のtableViewControllerでこれをチェックしても、人がアバターを持っていればtrueとimageを返します。

私は連絡先イメージを取得できない理由を知っていますか?

p.s. contactClass.manIDのタイプはidです。 ABMultiValueRef multiValue = ABRecordCopyValue((__bridge ABRecordRef)contactClass.manID, kABPersonPhoneProperty);が2番目のtableViewControllerに正しい値を返すため、正しいアドレスがあります

答えて

10

解決策が遅すぎるかもしれませんが、同じ問題が発生している他の人に役立つかもしれません。 およびABPersonCopyImageDataWithFormat()のような外観は、ABRecordRefコピー(例えば、ABAddressBookCopyArrayOfAllPeople()を使用して得られたアレイからのABContactRef)で、iOS 5.x上に期待通りに機能しません。これを回避するには、次のようにしてください:

- (UIImage*)imageForContact: (ABRecordRef)contactRef { 
    UIImage *img = nil; 

    // can't get image from a ABRecordRef copy 
    ABRecordID contactID = ABRecordGetRecordID(contactRef); 
    ABAddressBookRef addressBook = ABAddressBookCreate(); 

    ABRecordRef origContactRef = ABAddressBookGetPersonWithRecordID(addressBook, contactID); 

    if (ABPersonHasImageData(origContactRef)) { 
     NSData *imgData = (NSData*)ABPersonCopyImageDataWithFormat(origContactRef, kABPersonImageFormatOriginalSize); 
     img = [UIImage imageWithData: imgData]; 

     [imgData release]; 
    } 

    CFRelease(addressBook); 

    return img; 
} 
0

これ以上のアップデートはありますか?

いくつかの連絡先のサムネイルを見ることができないユーザーのために苦情を受けました。主にそれは正常に動作します、サムネイルが返されない特別なケースはありますか?

私は、次のコード使用しています:あなたが真剣に答えとして質問していました

- (instancetype)initWithABContact:(ABRecordRef)contact { 
      NSData *iThumbnailData = nil; 
      if (ABPersonHasImageData(contact)) { 
      iThumbnailData = 
      CFBridgingRelease(ABPersonCopyImageDataWithFormat(contact, kABPersonImageFormatThumbnail)); 
      } 
    } 
+0

を??? –

関連する問題