无法从枚举块向NSOperationQueue添加ALAssets

时间:2014-01-01 21:57:37

标签: ios objective-c cocoa alassetslibrary

我试图通过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}}

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

当获得它们的ALAssets超出范围时,将释放所有ALAssetsLibrary个对象。如果您想要执行您正在执行的操作,则需要对library保持强有力的引用,然后在完成后再解除分配library

(在您的情况下,他们在viewDidLoad的末尾解除分配。)