ABPerson использует старые данные изображения - PullRequest
0 голосов
/ 21 ноября 2011

У меня в приложении есть адресная книга, которая заполняется с веб-сайта json.Если я добавлю нового человека на свой веб-сайт, он будет добавлен в адресную книгу приложения при следующем запуске.Если я обновляю имя человека на моем веб-сайте, оно работает отлично ... но если я добавляю новое изображение к существующему человеку, оно все равно показывает старое изображение по умолчанию от Apple после перезагрузки.Если я скомпилирую его, появится изображение.Имеется ли кэш для изображений в адресной книге?

Я пробовал следующее:

BOOL imgBool = ABPersonHasImageData(aContact); -> false

и

ABPersonRemoveImageData(aContact, &anError); -> false because no picture in AB

Я добавляю изображение людей следующим образом:

UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[[[self.profsInSection objectAtIndex:indexPath.section] objectAtIndex:indexPath.row] bildUrl]]]];
NSData *picData = UIImageJPEGRepresentation(image, 0.9f);
[...]
ABPersonSetImageData(aContact, (CFDataRef)picData, nil);

Ошибок нет, просто сохраняется последняя картинка и игнорируются новые картинки ... :( Есть идеи?

1 Ответ

1 голос
/ 21 ноября 2011

Разве вы не забыли вызвать функцию сохранения после применения ваших изменений в адресной книге?

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 экземпляр не ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...