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 - будет возвращать изображение, а остальные записи будут указывать, что у них нет изображения.

0 ответов

Другие вопросы по тегам