我试图通过ALAssetLibrary
枚举来检索所有已保存的照片。在枚举块中,我尝试通过将每个ALAsset
传递给NSInvocationOperation
对象来发送每个NSOperationQueue
,然后将其添加到ALAsset
。但是,只有第一个queue = [[NSOperationQueue alloc] init];
queue.maxConcurrentOperationCount = 1;
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop)
{
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
[group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop)
{
if (! result) {
return;
}
NSInvocationOperation* operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(processAsset:) object:result];
[queue addOperation:operation];
return;
}];
} failureBlock:^(NSError *error) {
NSLog(@"%@", error);
}];
对象正确传递给处理方法。所有后续资产仅以零传递。
这是我的代码:
viewDidLoad中:
- (void)processAsset:(ALAsset *)asset
{
NSLog(@"Asset: %@", asset);
// Asset is nil after the first iteration
}
-processAsset方法
{{1}}
非常感谢任何帮助,谢谢!
答案 0 :(得分:1)
当获得它们的ALAssets
超出范围时,将释放所有ALAssetsLibrary
个对象。如果您想要执行您正在执行的操作,则需要对library
保持强有力的引用,然后在完成后再解除分配library
。
(在您的情况下,他们在viewDidLoad
的末尾解除分配。)