ABAddressBook:无法获取Person的图像

时间:2013-07-05 07:54:18

标签: ios abaddressbook abrecordref

我遇到了存储在数组中的ABRecordRef's的问题。这似乎与this stackoverflow中的问题非常相似。但是,我不是找到一个解决方法,而是想找出问题所在。我觉得我在这里错过了一些非常简单的东西。

最初我的问题是为每个有图像的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处的那个 - 将是将返回图像的条目,其余条目将指示它们没有图像。< / p>

0 个答案:

没有答案