我试图使用3D触摸快速动作,我设置它复制VEA软件代码。在他的示例代码,它的工作完美,但当我试图将它添加到我的应用程序,我得到一些不寻常的错误。我是新的编码和快速,所以请尽可能多的解释。谢谢。下面我有代码,这是在我的应用程序委托。
这是我得到错误(self.window?)的地方:
@available(iOS 9.0, *)
func handleShortcutItem(shortcutItem: UIApplicationShortcutItem) -> Bool
{
var handled = false
var window: UIWindow?
guard ShortcutIdentifier(fullType: shortcutItem.type) != nil else { return false }
guard let shortcutType = shortcutItem.type as String? else { return false }
switch (shortcutType)
{
case ShortcutIdentifier.First.type:
handled = true
var window = UIWindow?()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let navVC = storyboard.instantiateViewControllerWithIdentifier("ProjectPage") as! UINavigationController
// Error on line below
self.window?.rootViewController?.presentViewController(navVC, animated: true, completion: nil)
break
case ShortcutIdentifier.Second.type:
handled = true
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let navVC = storyboard.instantiateViewControllerWithIdentifier("ContactPageView") as! UINavigationController
// Error on line below
self.window?.rootViewController?.presentViewController(navVC, animated: true, completion: nil)
break
case ShortcutIdentifier.Third.type:
handled = true
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let navVC = storyboard.instantiateViewControllerWithIdentifier("ViewController") as! UINavigationController
// Error on line below
self.window?.rootViewController?.presentViewController(navVC, animated: true, completion: nil)
break
default:
break
}
return handled
}
7条答案
按热度按时间of1yzvn41#
Xcode 12.0快速移动5.0
目前,您需要:
1.从info.plist文件中删除“应用程序场景清单”;
1.删除场景委托类;
1.删除AppDelegate类中与场景相关的方法;
1.如果缺少
var window: UIWindow?
属性,请将其添加到AppDelegate类中。在
func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?)
中添加一些逻辑。需要支持iOS 12和13时的实施示例:
kg7wmglp2#
在iOS 13、Xcode 11中,sceneDelegate处理UIScene和窗口的功能。窗口在sceneDelegate中使用时可以正常执行。
uhry853o3#
当你使用场景视图时,窗口对象在场景代理中。复制窗口对象并将其放置在应用程序代理中,它将工作。
9jyewag04#
如果你的项目已经有
SceneDelegate
文件,那么你需要使用它来代替AppDelegate
,如下所示:nzk0hqpo5#
有时候,当你在AppDelegate中遇到问题时,可以通过快速的Product -〉Clean来解决。希望这有帮助。
zlwx9yxi6#
这对我很有效。
将以下代码添加到SceneDelegate的第一个函数
func scene(...)
的if语句if let windowScene = scene as? UIWindowScene {..Add Below Code Here..}
中。请确保在文件顶部添加
import MediaPlayer
。最后,您的代码应该是:
p4rjhz4m7#
首先你需要指定你需要使用的快捷键,因为有两种类型的快捷键:动态和静态,假设您选择了可以从属性列表信息中完成和添加的静态,则必须处理项目中应用程序委托文件中每个快捷方式的操作
这对你来说是很好的工作,但首先你必须确定rootViewController,我们可以说: