Ios 为联系人设置图像

Ios 为联系人设置图像,ios,abaddressbook,abpeoplepickerview,Ios,Abaddressbook,Abpeoplepickerview,我正在使用ABPeoplePickerNavigationController作为联系人的表示表。通过点击联系人,我需要为其设置新图像。我为委托添加了更改人员数据的代码,但无法更改图像。有什么建议吗 下面是我的代码: - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)

我正在使用
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;
}
我从这里下载了示例:


要检查其工作方式,您可以下载代码并使用我的代码修改下面的委托。

您需要通过
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)
}

您需要通过
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)
}

谢谢你的评论,我已经根据你的评论用代码更新了我的问题,但我仍然看不到该图像出现在我的联系人中。我已经检查了cfdata,person,_addressBook所有这些都有价值我已经添加了链接到我下载它的来源我想我使用了不同的地址簿参考。我从ABPeoplePickerNavigationController获得了地址簿的实例,效果很好。谢谢你的评论,我已经根据你的评论用代码更新了我的问题,但我仍然没有在我的联系人中看到该图像。我已经检查了cfdata,person,_addressBook所有这些都有价值我已经添加了链接到我下载它的来源我想我使用了不同的地址簿参考。我从ABPeoplePickerNavigationController获得了地址簿的实例,效果很好。谢谢