ABPersonSetImageData не работает - PullRequest
       12

ABPersonSetImageData не работает

1 голос
/ 20 января 2010

Я пытаюсь установить изображение для контакта, который хранится в моем iPhone. Я использовал следующий код Snipt - (BOOL) peoplePickerNavigationController: (ABPeoplePickerNavigationController *) peoplePicker должен быть продолженПосле выбораПерсона: (ABRecordRef) person {

UIImage *image = [UIImage imageNamed:@"icon.png"];
NSData *data=UIImagePNGRepresentation(image);   
CFDataRef dr = CFDataCreate(NULL, [data bytes], [data length]);

ABAddressBookRef iPhoneAddressBook = ABAddressBookCreate (); CFErrorRef erf = NULL;

if (ABPersonSetImageData(person, dr, nil))
{
    NSLog(@"successfully set image");
}
else
{
    NSLog(@"not successfully set image");
}

if( ABAddressBookSave(iPhoneAddressBook, &erf) )
{
    NSLog(@"save %s",erf);
}
else {
    NSLog(@"Not success");
}



CFRelease(dr);

CFRelease (iPhoneAddressBook); [self dismissModalViewControllerAnimated: YES];

return NO;

}

все работает, но изображение контакта не меняется. Пожалуйста, помогите!

Ответы [ 2 ]

1 голос
/ 20 января 2010

Взгляните на эту тему .Это тот же код!

Относительно достоинств: вы уверены, что ссылка на person, которую вы передали своему методу, действительна в контексте адресной книги?Я бы попытался сначала использовать такую ​​функцию, как ABAddressBookGetPersonWithRecordID, вместо того, чтобы передавать ABPersonRef s и ожидать, что они будут действительны для разных ссылок на адресную книгу.

Похоже, что он помог автору:)

Кстати, эта строка

CFDataRef dr = CFDataCreate(NULL, [data bytes], [data length]);

не нужна - NSData * и CFDataRef являются взаимозаменяемыми:

NSData является «бесплатной связью» со своимиОсновной фонд, CFData Reference.Это означает, что базовый тип Foundation взаимозаменяем в вызовах функций или методов с мостовым объектом Foundation.Следовательно, в методе, где вы видите параметр NSData *, вы можете передать CFDataRef, а в функции, где вы видите параметр CFDataRef, вы можете передать экземпляр NSData (вы приводите один тип к другому, чтобы подавить предупреждения компилятора).Это также относится к вашим конкретным подклассам NSData.См. Сменные типы данных для получения дополнительной информации о бесплатном мостовом соединении.

(из документации NSData ).

1 голос
/ 20 января 2010

вы звоните:

if (ABPersonSetImageData(person, dr, nil))

который передает 'nil' в качестве данных изображения ..

...