На Snow Leopard почему -[<ABImageClient> потребление ImageData:forTag:] не вызывается после вызова [ABPerson beginLoadingImageDataForClient:]?
Я пытаюсь загрузить дату изображения для записей человека в общем ABAddressBook
, В частности я звоню
-[ABPerson beginLoadingImageDataForClient:]
и передача в качестве аргумента объекта, который принимает ABImageClient
и реализует
-[<ABPersonClient> consumeImageData:forTag:]
Подход, который я использую, отлично работает на Mountain Lion, но не работает на Snow Leopard. Особенно, -consumeImageData:forTag:
никогда не звонят.
Следующий пример программы командной строки демонстрирует мой подход:
#import <Foundation/Foundation.h>
#import <AddressBook/AddressBook.h>
@interface ImageConsumer : NSObject <ABImageClient>
@property (nonatomic, strong) NSMutableDictionary *imagesForNumbers;
@end
@implementation ImageConsumer
- (id)init
{
self = [super init];
if (self) {
self.imagesForNumbers = [NSMutableDictionary dictionary];
}
return self;
}
- (void)consumeImageData:(NSData *)data forTag:(NSInteger)tag
{
[self.imagesForNumbers setObject:data forKey:[NSNumber numberWithInteger:tag]];
NSLog(@"%s: loaded data of length %zu for tag %zd", __PRETTY_FUNCTION__, data.length, tag);
}
@end
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSArray *persons = [[ABAddressBook sharedAddressBook] people];
ImageConsumer *imageConsumer = [[ImageConsumer alloc] init];
for (ABPerson *person in persons) {
NSInteger loadingKey = [person beginLoadingImageDataForClient:imageConsumer];
NSLog(@"requested data person named %@ %@ and received tag %zd", [person valueForProperty:kABFirstNameProperty], [person valueForProperty:kABLastNameProperty], loadingKey);
}
[[NSRunLoop mainRunLoop] run];
}
return 0;
}
Неправильно ли я использую вызовы ABAddressBook для загрузки данных изображений для случаев ABPerson
? Это ошибка с ABAddressBook
на снежном барсе? Если так, есть ли обходной путь?