我在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 处的那个 - 将是返回图像的条目,其余条目将指示它们没有图像。