1

我正在使用ABPeoplePickerNavigationController联系人的表示表。通过点击联系人,我需要为其设置新图像。我添加了代码来委托更改人员数据,但无法更改图像。有什么建议么?

这是我下面的代码:

 - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
    NSData *dataRef = UIImagePNGRepresentation(self.theImage);
    CFDataRef cfdata = CFDataCreate(NULL, [dataRef bytes], [dataRef length]);
    CFErrorRef error;

    ABPersonRemoveImageData(person, &error); // clean any image first from ref
    if (ABAddressBookSave(_addressBook, &error))
    {
        ABPersonSetImageData(person, cfdata, &error);
        ABAddressBookSave(_addressBook, &error);
    }
    CFRelease(cfdata);

    [self dismissViewControllerAnimated:YES completion:nil];

    return NO;
}

我从这里下载了示例:链接

要检查它是如何工作的,您可以下载代码并使用我的代码修改下面的委托。

4

1 回答 1

1

您需要通过以下方式保存更改ABAddressBookSave()

另外,请记住,如果您的联系人还没有图像,则在您使用 时会同时添加缩略图和全尺寸图像ABPersonSetImageData。但是,如果您的联系人已有全尺寸图像,则使用 时只会设置缩略图ABPersonSetImageData

// this is not production level code. method call return values and errors
// need to be handled properly
ABPersonRemoveImageData(person, &error); // clean any image first from ref
if (ABAddressBookSave(addressBook, &error))
{
   ABPersonSetImageData(person, cfdata, &error);
   ABAddressBookSave(addressBook, &error)
}
于 2013-09-16T16:07:17.793 回答