2013-09-16 1 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, person, _addressBook, все они имеют значение –

+0

. Я добавил ссылку на источники, откуда я ее загрузил. –

+1

Я думаю, что использовал другую адресную книгу. Я получаю экземпляр адресной книги от ABPeoplePickerNavigationController, и он работает хорошо. благодаря –