Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 除非我关闭优化,否则快速发布版本会崩溃_Ios_Swift_Crash_64 Bit - Fatal编程技术网

Ios 除非我关闭优化,否则快速发布版本会崩溃

Ios 除非我关闭优化,否则快速发布版本会崩溃,ios,swift,crash,64-bit,Ios,Swift,Crash,64 Bit,这是在XCode 6.2上 如果我在发布模式下运行应用程序,它将崩溃,但关闭优化后不会崩溃。代码看起来很简单。我已经为ObjC编写了十多年的程序,所以对编程来说并不陌生,等等 我注意到,在32位的情况下,它在发布模式(faster-O)下运行良好,但在64位真正的iOS硬件上它崩溃了 这是一个编译器错误吗?或者有可能只有一些编译器设置(可能发生在C中!)会导致糟糕的swift崩溃吗 我包括代码,但我不确定它是否有用 class func attemptLogin(completionHandle

这是在XCode 6.2上

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

我注意到,在32位的情况下,它在发布模式(faster-O)下运行良好,但在64位真正的iOS硬件上它崩溃了

这是一个编译器错误吗?或者有可能只有一些编译器设置(可能发生在C中!)会导致糟糕的swift崩溃吗

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

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

如果我在发布模式下运行我的应用程序,它会崩溃,但在关闭优化后,它不会在发布模式下崩溃。(在调试模式下运行正常。)

问题出在哪里?这行代码:

let parts = split(columnLetters, { $0 == "," })
是的。就这样。
split
函数根本没有拆分我的字符串。相反,它将整个原始字符串指定给零件数组的第一个元素。毫不奇怪,这导致应用程序稍后崩溃

我用这行代码替换了这行代码,它成功了:

let parts = columnLetters.componentsSeparatedByString(",")
由于以下原因,此错误尤其难以追踪:

  • 该应用程序在测试期间运行良好,因为它是在调试模式下编译的。消除其他因素(iOS版本、产品与测试数据)花了一些时间才意识到崩溃只发生在发布模式下

  • 如果我们关闭优化,应用程序将在发布模式下工作

  • 这次崩溃与我们两个月前部署的上一个成功发布版本之后引入的任何新代码无关。到目前为止,我们一直在使用
    split
    函数

  • 崩溃没有发生在问题所在的代码行上。后来在应用程序中发生了这种情况,这是由于字符串未被拆分

  • 代码在发布模式下编译良好。没有编译错误指向
    split
    函数的问题。函数只是没有拆分字符串


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

    我也遇到过类似的情况。因为我相信大多数人都在寻找更多关于潜在原因的见解,我将在我的代码中分享所发生的事情

    我在我的项目中使用了ReactiveCocoa,并且我设置了一个reactive信号,在我有
    UIView
    所选的声明更改时随时触发。它是模仿按钮的自定义视图,但实际上是从
    UIView
    派生的。在此块中,我将视图中所有其他类似按钮的视图设置为将其所选状态设置为
    NO

    在没有优化的情况下,执行起来很好。通过优化,它下降到一个无限循环中。奇怪吧

    简而言之,在我的场景中,我更改了以下代码:

    [allButtons makeObjectsPerformSelector:@selector(setSelected:) withObject:@(NO)];
    
    对此

    for(MyButtonLikeView* button in allButtons) {
        if(button.selected) {
            button.selected = NO;
        }
    }
    
    我知道这不太可能解决你的问题。但我希望它有用


    总之,使用您的调试器,留意调试中正确的代码,但在发布版中可能会突然停止工作。

    由于各种优化,您的“用户”在尝试访问时可能没有初始化。这件事曾经发生在我身上。确保在使用“attemptLogin”之前初始化了所有变量和类。我想是有关系的。谢谢,我会看一下,但是User.email是一个类方法,所以不需要初始化。它可能是这样一个已知的错误:如果你还可以用最新的编译器重现问题,当你开始尝试它时,别忘了向Apple提出一个错误:)我刚刚在Swift 5和Xcode 10.3中遇到了类似的情况,我不得不更改一个非常好的错误“guard var dict=event.getDict()else{”表示“var dict=event.getDict();如果dict==nil{”,则第一个文件在AppStore优化编译时崩溃……我刚刚将您的票数提高到0