iphone - ALAssetsLibrary 的 enumerateGroupsWithTypes :usingBlock:failureBlock: "broken" in iOS 4. 是 3.4 吗?

标签 iphone objective-c ios alasset alassetslibrary

我正在开发一个基于 ALAssetsLibrary api(从 4.0 开始可用)的 iOS 应用程序,我用它来检索设备上保存的所有图像和视频,这非常简单。不管怎样,只要我在我的 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:usingBlock:failureBlock: 永远不会被调用,因为我的 block 都没有被执行...并且没有引发错误!为什么?我能做什么?

ps:我尝试更改“types”参数,但这不是问题所在!

最佳答案

我不明白为什么(Apple 在这一刻我恨你!),但是 iOS 4.3.4 中的 ALAssetsLibrary 不允许在后台线程中获取(我正在运行一系列 NSOperationsNSOperationQueue 中)。 我通过使用 performSelectorOnMainThread 创建一个小包装器解决了这个问题。

编辑:

经过代码重构和升级到iOS 5后,我终于意识到问题实际上与ALAssetsLibrary的工作方式有关,不需要使用performSelectorOnMainThreadI wrote a post on it here .

关于iphone - ALAssetsLibrary 的 enumerateGroupsWithTypes :usingBlock:failureBlock: "broken" in iOS 4. 是 3.4 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6806493/

相关文章:

iphone - 使用 Storyboard时如何将导航 Controller 推送动画设置为 "No"

iphone - 在 Objective C 中更改字体样式 -(以全大写格式设置标签文本)

ios - 新的 UITableViewCell 不调用 subview drawRect()

iphone - sudzc 生成错误的 soap 请求

ios - IOS 应用程序中的 XlsLib 集成

iphone - Md5加密是对称还是非对称?

ios - 如何使 UITextView 检测到文本中的链接部分并且仍然有 userInteractionDisabled?

iphone - 区分动态生成的按钮

javascript - 响应式设计文章的等高行

ios - 根据屏幕大小调整 UIViews 的大小,就像在 iOS 中的 Android 中一样