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