我想通过“打开方式”菜单让我的应用程序打开一个文件,另一个文件由用户选择。 这是我的代码,但我无法让它工作
var url: NSURL! = NSBundle.mainBundle().URLForResource(filename, withExtension: "pbz")
self.controller = UIDocumentInteractionController(URL: NSBundle.mainBundle().URLForResource(filename, withExtension: "pbz")!)
let v = sender as UIView
let ok = self.controller.presentOpenInMenuFromRect(v.bounds, inView: self.view, animated: true)
你对此有什么想法吗?它编译但在运行时,在第二条指令处给出了EXC_BAD_INSTRUCTION错误。 类似的代码适用于Objective-C
答案 0 :(得分:0)
filename
。由于某种原因,pbz可能在您的主要包中不存在。使用当前代码,这将是致命错误并导致应用程序崩溃。
通过将url
声明为url
,您隐含地在第一行展开NSURL!
。您可以通过在NSURL
的{{1}}电话上添加!
来强行打开第二行的URLForResource
。如果在您的主程序包中找不到filename
。pbz,那么您的应用程序将在第二行崩溃,或者如果您尝试url
使用nil
nil
。
如果您绝对确定该变量永远为nil
,您应该只使用强制解包,并且只有在您使用时才使用隐式展开使用它时,请确保该变量不是url
。
您应该做的是检查以确保在您尝试使用之前URLForResource
从[{1}}返回的nil
不是if let url = NSBundle.mainBundle().URLForResource(filename, withExtension: "pbz") {
self.controller = UIDocumentInteractionController(URL: url)
let v = sender as UIView
let ok = self.controller.presentOpenInMenuFromRect(v.bounds, inView: self.view, animated: true)
} else {
/* resource doesn't exist */
}
。您可以使用Optional Binding轻松完成安全:
{{1}}