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;
谢谢