【问题标题】:iOS can't get person's imageiOS 无法获取人像
【发布时间】:2012-04-15 09:01:27
【问题描述】:

我有两个 tableViewControllers。第一个有一个联系人列表。另一个显示详细的人员信息。

第一个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 始终为 false,即使联系人有头像。我什至在第一个 tableViewController 上检查了这个,如果这个人有一个头像,那么它返回 true 和 image。

有人知道为什么我无法获取联系人图片吗?

附言contactClass.manIDid 的类型。它有一个正确的地址,因为ABMultiValueRef multiValue = ABRecordCopyValue((__bridge ABRecordRef)contactClass.manID, kABPersonPhoneProperty); 在第二个 tableViewController 中返回正确的值

【问题讨论】:

    标签: ios addressbook


    【解决方案1】:

    我可能为您提供解决方案为时已晚,但也许这会帮助其他遇到同样问题的人。 看起来ABPersonHasImageData()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;
    }
    

    【讨论】:

      【解决方案2】:

      这方面有什么进一步的更新吗?

      我收到了一些用户无法看到一些联系人的缩略图的投诉。大多数情况下它都可以正常工作,是否有任何不返回缩略图的特殊情况。

      我正在使用以下代码:

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

      【讨论】:

        猜你喜欢
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-30
        • 1970-01-01
        • 2016-04-08
        • 2022-01-20
        • 2012-05-14
        相关资源
        最近更新 更多