ABAddressBook: проблемы с получением имиджа человека
У меня проблема с ABRecordRef's
хранится в массиве. Это кажется очень похожим на проблему в этом стеке потока. Однако вместо того, чтобы просто найти обходной путь, я пытаюсь выяснить, в чем проблема. У меня такое ощущение, что я просто упускаю что-то действительно простое здесь.
Первоначально моя проблема была с получением эскиза изображения для каждого Person
это было изображение. С тех пор я упростил код в тестовом приложении, и у меня та же проблема с ABPersonHasImageData
тоже.
Очень просто, я получаю ABRecordRef's
и добавить их в NSMutableArray
, После того, как я добавил их, я делаю несколько проверок, чтобы увидеть, есть ли у них данные изображения. Они все делают изначально. Позже почти все записи в моем NSMutableArray
скажет мне, что у них нет данных изображения, кроме первого в массиве. Я могу получить имена, фамилии и многие другие значения из тех же ABRecordRefs
, но не данные изображения.
Вот мой код
Я добавляю ABRecordRefs
таким образом:
- (void) storePerson:(ABRecordRef) person
{
if (!_persons) {
_persons = [[NSMutableArray alloc] init];
}
[_persons addObject:(__bridge id)(person)];
}
Сразу же я запускаю проверку и повторяю эту проверку очень часто:
- (void) checkPersons
{
for (UInt16 i = 0; i < _persons.count; i++) {
ABRecordRef person = (__bridge ABRecordRef)(_persons[i]);
NSData *data = (__bridge_transfer NSData *)(ABPersonCopyImageDataWithFormat (person, kABPersonImageFormatThumbnail));
NSLog(@"index %d is %@ and it %@ image", i, person, ABPersonHasImageData(person)?@"HAS an": @"has NO");
}
}
Результаты для немедленной проверки и одна секунда спустя:
2013-07-05 00:45:30.980 lmiy[5300:907] index 0 is <CPRecord: 0x1c59d8b0 ABPerson> and it HAS an image
2013-07-05 00:45:31.893 lmiy[5300:907] index 0 is <CPRecord: 0x1c59d8b0 ABPerson> and it HAS an image
Затем я добавляю еще одного человека в массив. Кажется, у первого человека больше нет изображения:
2013-07-05 00:45:40.080 lmiy[5300:907] index 0 is <CPRecord: 0x1c59d8b0 ABPerson> and it has NO image
2013-07-05 00:45:40.082 lmiy[5300:907] index 1 is <CPRecord: 0x1c59aa60 ABPerson> and it HAS an image
Я добавляю третье лицо, и второе лицо тоже теряет свой имидж:
2013-07-05 00:48:30.867 lmiy[5300:907] index 0 is <CPRecord: 0x1c59d8b0 ABPerson> and it has NO image
2013-07-05 00:48:30.869 lmiy[5300:907] index 1 is <CPRecord: 0x1c59aa60 ABPerson> and it has NO image
2013-07-05 00:48:30.872 lmiy[5300:907] index 2 is <CPRecord: 0x1c59d450 ABPerson> and it HAS an image
Кажется, что данные изображения хранятся в изменчивом виде и каким-то образом сбрасываются. Я бы предпочел не получать и не сохранять все данные изображения на начальном этапе. Что я делаю, что вызывает это? Это неправильно, чтобы держаться ABRecordRefs
и использовать их таким образом?
ОБНОВЛЕНИЕ: Чаще всего первая запись в моем массиве _persons - с индексом 0 - будет возвращать изображение, а остальные записи будут указывать, что у них нет изображения.