Objective c 更改联系人的图像时

Objective c 更改联系人的图像时,objective-c,ios4,addressbook,Objective C,Ios4,Addressbook,我试图在peoplePickerNavigationController中更改所选联系人的图像,但当我选择联系人时,不会更改图像,也不会显示错误 嗯,据我所知,没关系!少了什么 代码如下: ABAddressBookRef aBook = ABAddressBookCreate(); UIImage *img = [UIImage imageNamed:@"90x90.png"]; NSData *dataRef = UIImagePNGRepresentation(img); CFDataR

我试图在
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 {  }

谢谢

设法解决了,对于将来有相同问题的人,只需使用
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;
谢谢