1

我在ABRecordRef's存储在数组中时遇到问题。这似乎与此 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 处的那个 - 将是返回图像的条目,其余条目将指示它们没有图像。

4

0 回答 0