enumerateGroupsWithTypes 循环没有停止
Posted
技术标签:
【中文标题】enumerateGroupsWithTypes 循环没有停止【英文标题】:enumerateGroupsWithTypes loop isn't stopping 【发布时间】:2016-01-22 08:26:46 【问题描述】:我正在使用以下代码遍历 eh 专辑,如果找到我需要的专辑,它应该停止进一步循环。
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 块。这是print
语句的输出。
组名:上次导入
找到了!上次导入
获取相册时出错:找不到相册
如何阻止这种情况发生?
【问题讨论】:
【参考方案1】:docs for enumerationBlock
状态
依次使用每个资产组调用的块。
枚举完成后,将调用 enumerationBlock 并将组设置为 nil。
这意味着在将 stop
设置为 true 后,enumerationBlock
将再次被调用,这次 group
为 nil,因此会导致输入 completion(album: nil, error: notFoundError)
-branch。
这会导致您的完成块被调用两次,一次是使用正确找到的专辑,另一次是在枚举结束时。
尝试插入几个print
-statements,看看什么时候进入了哪个分支,输入的是什么。特别是 stop
是否已设置为 true
。
【讨论】:
哦,废话。我不知道。我将完成处理程序填充到 if 检查if stop.memory.boolValue != true
内的 else 块中。现在一切都好。谢谢。以上是关于enumerateGroupsWithTypes 循环没有停止的主要内容,如果未能解决你的问题,请参考以下文章
ALAssetsLibrary enumerateGroupsWithTypes 不返回数据
使用 [ALAssetsLibrary enumerateGroupsWithTypes:] 时的 Cocoa 线程同步
ALAssetsLibrary enumerateGroupsWithTypes:ALAssetsGroupPhotoStream 不包含组中的视频