我遇到了存储在数组中的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>