2013-09-16 99 views
1

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

这是我下面的代码:

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

我下载的示例从这里:link

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

回答

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) 
} 
+0

感谢您的意见我已根据您的意见更新了我的问题代码,但我仍然没有看到该图像出现在我的联系人中。我检查cfdata,人,_addressBook他们都有价值 –

+0

我已经添加链接到我从哪里下载它的来源 –

+1

我想我已经使用了不同的地址簿参考。我从ABPeoplePickerNavigationController获得地址簿实例,并且效果很好。谢谢 –

相关问题