gpt4 book ai didi

ios - Swift:打开 "in menu"选项

转载 作者:行者123 更新时间:2023-11-28 09:18:47 25 4
gpt4 key购买 nike

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

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

最佳答案

filename.pbz 可能由于某种原因不存在于您的主包中。使用您当前的代码,这将是一个 fatal error 并导致您的应用程序崩溃。

通过将 url 声明为 NSURL!,您可以在第一行隐式展开 url。通过将 ! 附加到对 URLForResource 的调用,您可以在第二行强制展开 NSURL。如果 filename.pbz 在您的主包中找不到,那么您的应用程序将在您的第二行崩溃,或者如果您尝试在某处使用 url

只有当您绝对确定变量永远nil时,您才应该使用强制解包,并且只使用隐式解包如果您绝对确定变量在使用时不会为 nil

您应该做的是在尝试使用之前检查以确保从 URLForResource 返回的 url 不是 nil它。您可以使用 Optional Binding轻松且安全地做到这一点:

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 */
}

关于ios - Swift:打开 "in menu"选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26219628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com