- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用以下代码遍历 eh albums,如果它找到我需要的那个,它应该停止进一步循环。
public func importPhotosFromGallery(albumName: String = "Last Imported") {
fetchAlbum(albumName) { album, error in
if let error = error {
print("Error occurred fetching album: \(error.localizedDescription)")
} else {
if let album = album {
print("found it! \(album.name)")
}
}
}
}
private func fetchAlbum(albumName: String, completion: (album: ALAssetsGroup?, error: NSError?) -> ()) {
assetsLibrary.enumerateGroupsWithTypes(ALAssetsGroupAlbum, usingBlock: { group, stop in
if group != nil {
group.setAssetsFilter(ALAssetsFilter.allPhotos())
print("group name: \(group.name)")
if group.name == albumName {
stop.initialize(true)
completion(album: group, error: nil)
}
} else {
let notFoundError = NSError.createError("Album Not Found")
completion(album: nil, error: notFoundError)
}
}) { error in
completion(album: nil, error: error)
}
}
我在找到匹配后将 stop
变量的值更改为 true
但它仍然执行返回 notFoundError
的 else block 结束。这是 print
语句的输出。
group name: Last Imported
found it! Last Imported
Error occurred fetching album: Album Not Found
如何阻止这种情况发生?
最佳答案
The block to invoke using each asset group in turn.
When the enumeration is done, enumerationBlock is invoked with group set to nil.
这意味着在将 stop
设置为 true 之后,将再次调用 enumerationBlock
,这次 group
为 nil,因此导致 completion(album: nil, error: notFoundError)
-要进入的分支。
这会导致您的完成 block 被调用两次,一次是正确找到的专辑,另一次是在枚举结束时。
尝试插入一些 print
语句来查看何时进入哪个分支以及输入的是什么。特别是 stop
是否已设置为 true
。
关于ios - enumerateGroupsWithTypes 循环没有停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34942109/
我正在使用 [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 上
我是一名优秀的程序员,十分优秀!