【发布时间】:2015-03-17 18:46:28
【问题描述】:
这是在 XCode 6.2 上。
如果我在发布模式下运行应用程序,它会崩溃,但如果关闭优化,它不会崩溃。代码看起来很简单。我已经为 ObjC 编程了十多年,所以对编程等并不陌生。
我注意到在 32 位中它在发布模式下运行良好(Fastest -O),但在 64 位真正的 iOS 硬件上它会崩溃。
这是编译器错误吗?或者是否有可能只有一些编译器设置崩溃(这可能发生在 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)
}
}
}
【问题讨论】:
-
您的“用户”在此处尝试访问时可能未初始化由于各种优化。它发生在我身上一次。确保在使用“attemptLogin”之前初始化所有变量和类。
-
埃里克。谢谢会看,但 User.email 是一个类方法,所以不需要初始化。