ios - 调用完成处理程序后正在执行的代码

标签 ios swift

为什么在调用完成处理程序后继续进行?

查看代码中的注释。查看代码路径以到达#1。在这一点上,我期望代码调用完成处理程序 complete(),并从函数返回,从而阻止执行 #2。但是,#2 处的代码似乎仍会被触发。知道为什么会出现这个操作系统吗?

func syncSessionLog(withCompletion complete: @escaping ((Bool, String?) -> Void)) {

    ... bunch of code

        managedObjectContext.performAndWait {
            let trackFetchRequest: NSFetchRequest<NSFetchRequestResult> = Track.fetchRequest()
            let trackPredicate = NSPredicate(format: "id == \(session.track_id)")

            trackFetchRequest.predicate = trackPredicate
            trackFetchRequest.fetchLimit = 1;

            do {
                let foundTrack = try self.managedObjectContext.fetch(trackFetchRequest) as! [Track]
                if foundTrack.count < 1 {
                    self.debug.log(tag: "SessionManager", content: "not found tID: \(session.track_id)")

                    //#1 When not found, complete is called, yet the code still manages to reach "do stuff" down the bottom.

                    complete(false, "Not found")
                    return
                }

                associatedTrack = foundTrack[0]
            }
            catch {
                self.debug.log(tag: "SessionManager", content: "Failed to get Track object from Core Data: \(error.localizedDescription)")
                fatalCoreDataError(error)
                complete(false, "Failed to retrieve")
            }
        }

        //#2 do stuff with associatedTrack

最佳答案

return 将退出当前上下文,这是与 performAndWait 关联的闭包。在该闭包返回后,继续执行 performAndWait 之后的下一条语句,即 #2 处的任何内容。

您可以将代码从第 2 点移到闭包中

关于ios - 调用完成处理程序后正在执行的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42478275/

相关文章:

ios - 升级到 iOS9 后,我在 iPhone 6、6s、6p 和 6sp 上的应用程序被拉伸(stretch)

ios - CoreData 上的 Realm 我应该使用 NSFetchedResultController 还是字典?

ios - 信任用于 HTTPS 连接的自签名证书

ios - 正向域未在具有响应模板的 iphone 中呈现

ios - 更改 UIActivityViewController UINavigationBar 颜色

iphone - sqlite3 在 iPhone 应用程序中插入或替换语法问题

swift - Sprite Kit 随机位置

ios - 在 WKWebView 中使用自定义本地字体

IOS Swift 从数组中搜索表

ios - 如何在 UINavigationController 的 View 下为 UIView 设置动画