我有两个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]];
...
}
Run Code Online (Sandbox Code Playgroud)
第二个tableViewController的代码块
ABRecordRef person = (__bridge ABRecordRef)contactClass.manID;
BOOL isHasImage = ABPersonHasImageData(person);
Run Code Online (Sandbox Code Playgroud)
变量isHasImage始终为false,即使联系人具有头像.我甚至在第一个tableViewController上检查了这个,如果有人有头像,那么它返回true和image.
有谁知道为什么我不能得到联系人图像?
ps contactClass.manID是的类型id.它有一个正确的地址,因为ABMultiValueRef multiValue = ABRecordCopyValue((__bridge ABRecordRef)contactClass.manID, kABPersonPhoneProperty);在第二个tableViewController中返回正确的值
ale*_*mbu 10
我可能为你找到一个解决方案为时已晚,但也许这会帮助那些遇到同样问题的人.在iOS 5.x 上的副本上,副本(例如,从使用的数组中获得)看起来ABPersonHasImageData()并且ABPersonCopyImageDataWithFormat()不能按预期工作.您可以像这样解决它:ABRecordRefABContactRefABAddressBookCopyArrayOfAllPeople()
- (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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3598 次 |
| 最近记录: |