我正在使用应用中的资产库来枚举设备的照片事件。
我在iPad上测试代码时效果很好。照片事件被枚举,我可以完美地处理它们。当我在我的iPhone上尝试相同的代码时,没有任何反应(我也在这个设备上有照片事件)。看起来好像甚至没有调用枚举代码(即控制台中没有日志,参见代码)。
以下是代码:
- (void)loadEvents {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupEvent
usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (group) {
[photosEventsArray addObject:group];
NSLog(@"Adding group");
} else {
NSLog(@"End of the enumeration");
}
}
failureBlock: ^(NSError *error) {
NSLog(@"Failure while enumerating assets: %@", error);
}];
[library release];
NSLog(@"Found %d events", photosEventsFound);
[self performSelectorOnMainThread:@selector(stopSpinner) withObject:nil waitUntilDone:YES];
[pool drain];
}
我的部署目标是iOS 4.1。
知道这里出了什么问题吗?
答案 0 :(得分:1)
经过更多调查后,似乎在iOS 4.3.5上,从主线程中调用了enumerateGroupsWithTypes方法。
我以这种方式修补了我的代码(从iPhone和iPod Touch设置为NO,从iPad设置为YES):
if (scanAssetsInBackground) {
[self performSelectorInBackground:@selector(loadEvents) withObject:nil];
} else {
[self performSelectorOnMainThread:@selector(loadEvents) withObject:nil waitUntilDone:YES];
}
适用于该补丁。
在Apple文档中没有太多关于此信息的信息,并且无法知道哪种方式(后台或主线程)是扫描资产库的正确方法。