AlassetSlebibrary的EnumerateGroupSwithTypes是:使用block:FailterBlock:iOS 4.3.4中的“损坏”?

StackOverflow https://stackoverflow.com/questions/6806493

我正在开发一个基于AlassetLibrary API的iOS应用程序(自4.0以来可用),我使用它来检索保存在设备上的所有图像和视频,并且这样做非常简单。无论如何,一旦我在iPhone 4上安装iOS 4.3.4,我的代码就停止工作。调用获取的行无济于事!该代码为以下(并且在iOS 4.3.3上正常工作):

ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease];

ALAssetsGroupEnumerationResultsBlock assetsEnumerator = ^(ALAsset *result, NSUInteger index, BOOL *stop) { 
// handle asset
    };

ALAssetsLibraryGroupsEnumerationResultsBlock groupsEnumerator = ^(ALAssetsGroup *group, BOOL *stop) { 
// handle group
    };

    ALAssetsLibraryAccessFailureBlock failHandler = ^(NSError *error) {
// handle error
    };


[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:groupsEnumerator failureBlock:failHandler];

看起来 EnumerateGroupswithTypes:使用block:FailityBlock: 永远不会被打电话,因为我的块没有执行...也没有引起错误!为什么?我能做些什么?

PS:我试图更改“类型”参数,但这不是问题!

有帮助吗?

解决方案

我不明白为什么(这一刻我讨厌您!),但是iOS 4.3.4中的AlassetSlebibrary不允许在背景线程中获取(我正在运行一系列 NSOperations 在一个 NSOperationQueue)。我通过使用一个小包装器来解决 performSelectorOnMainThread.

编辑:

经过代码进行重构和升级iOS 5之后,我最终意识到问题实际上与AlassetSlebibrary的工作方式有关,无需使用 performSelectorOnMainThread. 我在这里写了一篇文章.

其他提示

非常重要的事情:

用户必须 允许位置服务 对于您的应用。

如Apple Doc所写 EnumerateGroupswithTypes:使用block:FailityBlock 方法。

特殊考虑

如果用户尚未启用位置服务(在设置>“常规”中),则此方法将失败,而AlryAlaSsetSlectLaryAccessgloballyDeniedError。

也许您应该通过向用户显示警报来处理这种情况。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top