- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 [ALAssetsLibrary enumerateGroupsWithTypes:] 将 ALAsset 存储在数组中。由于这是一个异步操作,我需要等待它完成才能继续我的工作。
我读到Cocoa thread synchronisation when using [ALAssetsLibrary enumerateGroupsWithTypes:]并尝试了推荐的 NSConditionLock。然而,这些 block 总是在主线程中执行,因此,如果我使用条件锁等待,主线程将被阻塞,并且这些 block 将不会被执行 -> 我被卡住了。我什至尝试在新线程上运行方法 loadAssets,但 block 仍然在主线程上执行。
我找不到实际等待枚举完成的方法。有没有办法将 block 强制到与主线程不同的线程或我可以做的其他事情?
代码如下:
- (void)loadAssets
{
assets = [NSMutableArray array];
NSConditionLock *threadLock = [[NSConditionLock alloc] initWithCondition:THREADRUNNING];
void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop)
{
if(result != nil)
{
[assets addObject:result];
}
};
void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop)
{
if(group != nil)
{
[group enumerateAssetsUsingBlock:assetEnumerator];
}
[threadLock lock];
[threadLock unlockWithCondition:THREADFINISHED];
};
void (^assetFailureBlock)(NSError *) = ^(NSError *error)
{
[threadLock lock];
[threadLock unlockWithCondition:THREADFINISHED];
};
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:assetGroupEnumerator failureBlock:assetFailureBlock];
[threadLock lockWhenCondition:THREADFINISHED];
[threadLock unlock];
[assetsLibrary release];
[threadLock release];
}
最佳答案
在完成枚举对象之前,您正在终止 assetLibrary 对象。将其移至您的 .h 文件并在 dealloc 中释放它。
关于iphone - ALAssetsLibrary enumerateGroupsWithTypes : - Thread synchronization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6257250/
我正在使用 [assetsLibrary enumerateGroupsWithTypes:groupTypes usingBlock:listGroupBlock failureBlock:fail
我正在使用以下代码遍历 eh albums,如果它找到我需要的那个,它应该停止进一步循环。 public func importPhotosFromGallery(albumName: String
我正在使用 AssetsLibrary 框架来检索 iPhone 中的所有 Assets 组。我有一些这样的代码片段: NSMutableArray *groups = [[NSMutableArra
我正在使用 [ALAssetsLibrary enumerateGroupsWithTypes:] 将 ALAsset 存储在数组中。由于这是一个异步操作,我需要等待它完成才能继续我的工作。 我读到C
在 iOS 4.x 上,我尝试枚举设备上的所有照片,当枚举完成后,再用相同的方法进一步处理该列表。 由于 enumerateGroupsWithTypes 的 block 在另一个线程上异步运行,我看
我尝试使用 ALAssetsLibrary 类的 enumerateGroupsWithTypes 方法,但第一个参数出现错误。 方法原型(prototype): func enumerateGrou
照片流组在过滤视频时返回计数 0。这是要重现的代码: ALAssetsGroupType groupTypes = ALAssetsGroupPhotoStream; ALAssetsFilter*
我注意到即使我将 *stop BOOL 指针设置为 YES,我的枚举 block 也会被执行两次。我以为设置 *stop = YES 会在第一个之后停止? [lib enumerateGroupsWi
我最近和一些人一样,发现[ALAssetsLibrary enumerateGroupsWithTypes] 喜欢在另一个线程上运行它的 block 。苹果没有记录这一点真是太可惜了:-) 在我目前的
今天我将 Xcode 6 升级到 beta 5(从 beta 1),你可以想象我发现我以前运行完美的 Swift 应用程序充满了各种错误(嗯,从 beta 1 开始有很多变化)。在所有错误中,有一个我
我正在开发一个基于 ALAssetsLibrary api(从 4.0 开始可用)的 iOS 应用程序,我用它来检索设备上保存的所有图像和视频,这非常简单。不管怎样,只要我在我的 iPhone 4 上
我是一名优秀的程序员,十分优秀!