2011-11-16 3 views
1

Я пытаюсь изменить изображение выбранного контакта в peoplePickerNavigationController, но когда я выбираю контакт, он не меняет изображение и не показывает ошибки.При изменении изображения контакта

Ну, насколько я знаю, все в порядке! Чего-то не хватает?

Это код:

ABAddressBookRef aBook = ABAddressBookCreate(); 

UIImage *img = [UIImage imageNamed:@"90x90.png"]; 
NSData *dataRef = UIImagePNGRepresentation(img); 
CFDataRef cfdata = CFDataCreate(NULL, [dataRef bytes], [dataRef length]); 
CFErrorRef error; 

if(ABPersonRemoveImageData(person, &error)){ 
    NSLog(@"OK"); 
} 
if(ABAddressBookSave(aBook, &error)){ 
    NSLog(@"OK"); 
} 

if(ABPersonSetImageData(person, cfdata, &error)){ 
    NSLog(@"OK"); 
} 
if(ABAddressBookSave(aBook, &error)){ 
    NSLog(@"OK"); 
} 

CFRelease(cfdata); 

[self dismissModalViewControllerAnimated:YES]; 
return NO; 

Учитывая, что приведенный выше код в BOOL:

- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person { } 

Спасибо!

ответ

0

удалось решить, для тех, кто имеет один и тот же вопрос в будущем, просто использовать ABRecordGetRecordID и ABAddressBookGetPersonWithRecordID и следует код ниже:

ABAddressBookRef aBook = ABAddressBookCreate(); 

NSNumber *recordId = [NSNumber numberWithInteger:ABRecordGetRecordID(person)]; 
ABRecordRef pID = ABAddressBookGetPersonWithRecordID(aBook,recordId.integerValue); 

UIImage *img = [UIImage imageNamed:@"90x90.png"]; 
NSData *dataRef = UIImagePNGRepresentation(img); 
CFDataRef cfdata = CFDataCreate(NULL, [dataRef bytes], [dataRef length]); 
CFErrorRef error; 

ABPersonRemoveImageData(pID, &error); 
ABAddressBookSave(aBook, &error); 

ABPersonSetImageData(pID, cfdata, &error); 
ABAddressBookSave(aBook, &error); 

CFRelease(cfdata); 

[self dismissModalViewControllerAnimated:YES]; 
return NO; 

Спасибо!

Смежные вопросы