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 不包含组中的视频

ALAssetsLibrary ALAssetsLibraryDataUnavailableError

访问 iPhone 照片库中的所有照片?

从AssetLibrary获取视频流并保存到文件