斯威夫特:在菜单中打开""选项

时间:2014-10-06 15:30:21

标签: ios menu swift

我想通过“打开方式”菜单让我的应用程序打开一个文件,另一个文件由用户选择。 这是我的代码,但我无法让它工作

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

1 个答案:

答案 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}}