Я разрабатываю приложение, которое меняет контактное изображение контакта, когда я выбираю любой контакт из панели выбора контактов.Добавление контактного изображения в адресную книгу iPhone
Вот код, я реализовал до сих пор,
(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
CFErrorRef error=nil;
ABAddressBookRef addressBook = ABAddressBookCreate();
NSString *path1 = [[NSBundle mainBundle] pathForResource:@"birthday.jpg" ofType:nil];
UIImage *img = [UIImage imageWithContentsOfFile:path1];
NSData *dataRef = UIImagePNGRepresentation(img);
CFDataRef cfDataRef = CFDataCreate(NULL, [dataRef bytes], [dataRef length]);
if(ABPersonHasImageData(person))
{
ABPersonRemoveImageData(person, &error);
ABAddressBookSave(addressBook, &error);
}
if (ABPersonSetImageData(person,cfDataRef, &error))
{
NSLog(@"Set contact photo %@", error);
if (ABAddressBookHasUnsavedChanges(addressBook))
{
NSLog(@"Changes made to address book");
}
else {
NSLog(@"No changes made to address book");
}
if (ABAddressBookSave(addressBook, &error))
{
NSLog(@"Saved");
}
else {
NSLog(@"Not saved");
}
}
CFRelease(cfDataRef);
// TODO: release peoplePicker (and refactor code to not have it global)
[self dismissModalViewControllerAnimated:YES];
return NO;
}
Но когда я отладка и посмотреть на ABAddressBookHasUnsavedChanges
она возвращается ложной и изображение не получает установить контакт. Что может быть причиной?
Я написал этот метод в shouldContinueAfterSelectingPerson
; Я проверил изображение, и оно не является нулевым, а ABPersonSetImageData
возвращает TRUE
.
Я обновил код, проверил уже установленное изображение, если да, то я удаляю это изображение и сохраняю сохраненную адресную книгу и передавая CFDataRef.
Но до сих пор ее не работает
Update:2
I have edited the code , please look at the changes.
Я написал все мой код в этом методе
- (BOOL) peoplePickerNavigationController: (ABPeoplePickerNavigationController *) peoplePicker shouldContinueAfterSelectingPerson: (ABRecordRef) человек {},
So Определенно будет человек, который уже находится в адресной книге. Но я попытался в соответствии с вышеуказанным кодом, что ABAddressBookHasUnsavedChanges возвращает false
Попробуйте создать данные изображения следующим образом: 'CFDataRef cfDataRef = CFDataCreate (NULL, [dataRef bytes], [dataRef length]);' и затем передать его в 'ABPresonSetImageData'. И, конечно же, не забудьте выпустить! Также есть ли существующее изображение до этого изменения (проверьте «ABPersonHasImageData')? Если да, то сначала удалите его - 'ABPersonRemoveImageData'. –
Я обновил код в соответствии с вами, но его не работает, пожалуйста, проверьте отредактированный код. – krish
ABAddressBookHasUnsavedChanges возвращает false. в чем проблема ? – krish