不确定这是否是 Swift、XCode 或 Alamofire 的问题,但我认识到我的混合 Swift/Objc 应用程序中不同地方的奇怪行为。它只发生在用 Swift 编写并使用闭包/网络的部分。这是发生这种情况的示例代码:
Alamofire.request(.DELETE, "http://someUrl.com/user", parameters: nil)
.response { (request, response, data, error) in
// some cleanup code and an alert
}
当我运行我的应用程序时调试模式然后在我的 iPhone 上一切正常,当我执行运行上面代码的“删除帐户”操作时,清理代码和警报就会像应有的那样呈现。
但是当我通过 Testflight 将我的应用程序发送给用户或直接在同一台 iPhone 上运行我的应用程序但使用发布构建配置 then 清理代码不运行 and 警报不显示。看起来整个闭包没有被调用。
有谁有过这种奇怪行为的经历并知道如何预防它们?我不确定这里的问题是什么,因此我很难找出适用于调试和发布模式的解决方案。
感谢您的任何帮助!
环境:我使用 Alamofire 1.1.3 作为嵌入式框架,作为 git 子模块集成到我的项目中。该应用程序仅在 iOS 8+ 上运行,我的 iPhone 6 上安装了 iOS 8.1.2。
在与您的项目(Swift + Objective-C)类似的项目中构建发布时,我遇到了一些类似的问题,在我的例子中,它跳过了循环内的一段代码,但它并没有跳过循环本身。
为了解决这个问题我们改变了Build Settings -> Apple LLVM 6.0 Code Generation -> Optimization Level
调试的值Fastest, Smallest [-Os]
,这与发布版相同,然后我们在调试版上遇到了相同的错误。然后我们尝试将两者更改为None [-O0]
(这是调试默认值)但它只会使错误在调试模式下消失,而不是在发布模式下消失,因此我们必须解决该代码并更改一些 UI。
我愿意相信这是编译器在 Release 中所做的事情,我们无法更改,所以也许这是一个 Xcode Bug。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)