Разве вы не забыли вызвать функцию сохранения после применения ваших изменений в адресной книге?
ABAddressBookSave(addrBook, nil);
ОБНОВЛЕНИЕ: поэтому, пока вы используете ABUnknownPersonViewController, я сам попробовал следующий код, и он работает как на симуляторе, так и на устройстве
ABRecordRef newPerson = ABPersonCreate();
ABRecordSetValue(newPerson, kABPersonLastNameProperty, @"Smith", nil);
UIImage *personImage = [UIImage imageNamed:@"image.jpg"];
NSData *dataRef = UIImageJPEGRepresentation(personImage, 0.9f);
CFErrorRef error = nil;
bool result = ABPersonSetImageData(newPerson, (CFDataRef)dataRef, &error);
ABUnknownPersonViewController *controller = [ABUnknownPersonViewController new];
//controller.addressBook = addressBook;
controller.allowsAddingToAddressBook = YES;
controller.displayedPerson = newPerson;
[self.navigationController pushViewController:controller animated:YES];
[controller release];
Проблема, с которой я столкнулся при тестировании этого кода, заключалась в моем опечатке в имени изображения, поэтому экземпляр UIImage
был нулевым, а NSData
пустым. И ABPersonSetImageData
не дал никакой ошибки в этом. Итак, дважды проверьте ваш UIImage
экземпляр не ноль.