2012-04-15 12 views
4

Ich habe zwei tableViewControllers. Der erste hat eine Liste von Kontakten. Der andere zeigt detaillierte Personendaten.iOS kann das Bild der Person nicht erhalten

Ein Teil des Codes der ersten 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]]; 
    ... 
} 

A chunck-Code der zweiten Tableviewcontroller

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

Variable isHasImage ist immer falsch, auch wenn der Kontakt einen Avatar hat. Ich habe dies sogar auf dem ersten TableViewController überprüft und wenn Person einen Avatar hat, dann gibt es True und Image zurück.

Weiß jemand, warum ich nicht Kontakt Bilder bekommen kann?

p.s. ist ein Typ von id. Es hat eine korrekte Adresse, denn ABMultiValueRef multiValue = ABRecordCopyValue((__bridge ABRecordRef)contactClass.manID, kABPersonPhoneProperty); gibt den richtigen Wert in der zweiten Tabelle zurück.

Antwort

10

Ich bin vielleicht zu spät für eine Lösung für Sie, aber vielleicht wird dies anderen helfen, die mit dem gleichen Problem stecken. Sieht aus wie ABPersonHasImageData() und ABPersonCopyImageDataWithFormat() funktionieren nicht wie erwartet auf ABRecordRef Kopien (z. B. ein ABContactRef von einem Array mit ABAddressBookCopyArrayOfAllPeople() erhalten), mindestens auf iOS 5.x. Sie können es wie folgt umgehen:

- (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

Jede weitere Update auf das?

Ich habe Beschwerden für einige Benutzer erhalten, die das Thumbnail für einige Kontakte nicht sehen können. Meist klappt es gut, gibt es einen Sonderfall, bei dem Thumbnails nicht zurückgegeben werden.

ich das folgende Stück Code verwenden:

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

Haben Sie ernsthaft eine Frage als Antwort fragen ??? –

Verwandte Themen