正如我在标题中所说,我正在为iPhone编写一个应用程序,它在调试模式下运行完美,但当我将其构建为发布并通过TestFlight安装时,它会崩溃.由于崩溃日志,它可能必须使用以下行:
let path = NSBundle.mainBundle().pathForResource("PrinterList", ofType: "plist")
if path != nil {
let printerDic = NSDictionary(contentsOfFile: path!)
let printerList = NSArray(array: printerDic.allKeys)
printerNames = printerList as [String]
}
Run Code Online (Sandbox Code Playgroud)
我使用Brother的框架在没有AirPrint的情况下进行打印,但我认为这不是问题,因为应用程序在使用框架之前崩溃了.它只在我执行这些行的ViewController中崩溃.我也只需要在这个ViewController中使用框架.
不确定这是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
}
Run Code Online (Sandbox Code Playgroud)
当我在我的iPhone上以调试模式运行我的应用程序时,一切正常,清理代码和警报就像我们执行运行上面代码的"删除帐户"操作时那样.
但是,当我把我的应用程序用户通过Testflight或直接运行我在同一个iPhone应用程序,但使用发布版本的配置,然后清理代码不运行和警报显示不出来.看起来整个闭包不会被调用.
有没有人有这种奇怪行为的经验,知道如何预防它们?我不确定这里的问题是什么,因此我很难找到适用于调试和发布模式的解决方案.
感谢您的任何帮助!
环境: 我使用Alamofire 1.1.3作为嵌入式框架集成到我的项目中作为git子模块.该应用仅在iOS 8+上运行,我在iPhone 6上安装了iOS 8.1.2.
在Swift 1.2的最新升级之后,我无法弄清楚如何将一行文本拆分成单词.我曾经这样做过:
let bits = split(value!, { $0 == " "}, maxSplit: Int.max, allowEmptySlices: false)
Run Code Online (Sandbox Code Playgroud)
但那不再有效,因为......
Cannot invoke 'split' with an argument list of type '(String, (_) -> _, maxSplit: Int, allowEmptySlices: Bool)'
Run Code Online (Sandbox Code Playgroud)
嗯,好吧,即使我可以上次建造?好吧,我们试试......
let bits = split(value!, { $0 == " "})
Run Code Online (Sandbox Code Playgroud)
那个和我能想到的其他版本最终都说:
Missing argument for parameter 'isSeparator' in call
Run Code Online (Sandbox Code Playgroud)
让我们听听它测试新的编程语言!好极了!
谁知道1.2的正确秘诀?