2011-11-16 59 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

設法解決,對於那些誰具有同樣的問題在未來,只需要使用ABRecordGetRecordIDABAddressBookGetPersonWithRecordID並遵循下面的代碼:

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; 

謝謝!