草庐IT

ios - Swift - 发布构建崩溃,除非我关闭优化

coder 2023-09-13 原文

这是在 XCode 6.2 上。

如果我在 Release模式下运行该应用程序,它会崩溃,但关闭优化后它不会崩溃。代码看起来很简单。我已经为 ObjC 编程十多年了,所以对编程等并不陌生。

我注意到在 32 位中它在 Release模式下运行良好(Fastest -O),但在 64 位真正的 iOS 硬件上它崩溃了。

这是编译器错误吗?或者是否有可能只有某些编译器设置崩溃的 swift 很差(这可能发生在 C 中!)。

我包含代码,但我不确定它是否有用。

class func attemptLogin(completionHandler: (result: JSON?, error: NSError?) -> ()) {
    // It appears that these variables are not working in the completion block in 64 with optimization on.
    let email = User.email
    let password = User.password

    // setup login.
    let parameters: [String : AnyObject] = [
        "action": "login",
        "login": [
            "email": email,
            "password": password,
            "type": User.type
        ]
    ]

    // Fire off REST POST Async
    request(.POST, baseUrl, parameters: parameters, encoding: .JSON)
        .responseSwiftyJSON { (request, response, jsonDict, error) in

                // in release mode on 64 bit, things are seriously bad here. 
            println("jsonDict login attempt: ")
            print(jsonDict)

            if let token = jsonDict["login"]["token"].string {
                println("token found is: " + token)
                User.token = token;
                User.email = email;
                User.password = password;
                completionHandler(result: jsonDict, error: nil)
            } else {
                println("No Token")
                User.token = "";
                User.email = "";
                User.password = "";

                let errorNS = NSError(domain: "stethIoUser", code: 404, userInfo: nil)

                completionHandler(result: jsonDict, error: errorNS)
            }
        }
}

最佳答案

我昨天遇到了类似的情况。

我运行的是 Xcode 6.2。

如果我在 Release模式下运行我的应用程序,它会崩溃,但关闭优化后,它不会在 Release模式下崩溃。 (在 Debug模式下它运行良好。)

问题是什么?这行代码:

let parts = split(columnLetters, { $0 == "," })

是的。就是这样。 split 函数根本没有拆分我的字符串。相反,它将整个原始字符串分配给 parts 数组的第一个元素。毫不奇怪,这会导致应用程序稍后崩溃。

我用这个替换了那行代码,它起作用了:

let parts = columnLetters.componentsSeparatedByString(",")

由于以下原因,此错误特别难以追踪:

  1. 该应用程序在测试期间运行良好,因为它是在 Debug模式下编译的。花了一些时间排除其他因素(iOS 版本、prod 与测试数据),才意识到崩溃仅发生在 Release 模式下。

  2. 如果我们关闭优化,该应用程序可以在 Release模式下运行。

  3. 此次崩溃与自两个月前部署的上一个成功发布版本以来引入的任何新代码无关。到目前为止,我们一直在毫无问题地使用 split 函数。

  4. 崩溃没有发生在有问题的代码行上。由于字符串未拆分,它稍后在应用程序中发生。

  5. 代码在 Release模式下编译良好。没有指向 split 函数问题的编译错误。该函数根本没有拆分字符串。

我没有在 Xcode 6.3 或更高版本上对此进行测试。 (由于其他原因,我们无法升级到 Xcode 6.3/Swift 1.2,但很快就会升级。)

关于ios - Swift - 发布构建崩溃,除非我关闭优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29107277/

有关ios - Swift - 发布构建崩溃,除非我关闭优化的更多相关文章

  1. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  2. Ruby Readline 在向上箭头上使控制台崩溃 - 2

    当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby​​安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少

  3. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  4. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  5. ruby - 如何关闭 ruby​​ gem "Spreadsheet?"中的文件 - 2

    下面的代码在我第一次运行它时就可以正常工作:require'rubygems'require'spreadsheet'book=Spreadsheet.open'/Users/me/myruby/Mywks.xls'sheet=book.worksheet0row=sheet.row(1)putsrow[1]book.write'/Users/me/myruby/Mywks.xls'当我再次运行它时,我会收到更多消息,例如:/Library/Ruby/Gems/1.8/gems/spreadsheet-0.6.5.9/lib/spreadsheet/excel/reader.rb:11

  6. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  7. ruby-on-rails - 如何在发布新的 Ruby 或 Rails 版本时收到通知? - 2

    有人知道在发布新版本的Ruby和Rails时收到电子邮件的方法吗?他们有邮件列表,RubyonRails有一个推特,但我不想听到那些随之而来的喧嚣,我只想知道什么时候发布新版本,尤其是那些有安全修复的版本。 最佳答案 从therailsblog获取提要.http://weblog.rubyonrails.org/feed/atom.xml 关于ruby-on-rails-如何在发布新的Ruby或Rails版本时收到通知?,我们在StackOverflow上找到一个类似的问题:

  8. ruby - 在 Ruby 中构建长字符串的简洁方法 - 2

    在编写Ruby(客户端脚本)时,我看到了三种构建更长字符串的方法,包括行尾,所有这些对我来说“闻起来”有点难看。有没有更干净、更好的方法?变量递增。ifrender_quote?quote="NowthatthereistheTec-9,acrappyspraygunfromSouthMiami."quote+="ThisgunisadvertisedasthemostpopularguninAmericancrime.Doyoubelievethatshit?"quote+="Itactuallysaysthatinthelittlebookthatcomeswithit:themo

  9. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  10. ruby - 使用 rbenv 和 ruby​​-build 构建 ruby​​ 失败,出现 undefined symbol : SSLv2_method - 2

    我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby​​2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby​​-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm

随机推荐