我有一个闹钟应用程序。它有2个VC。 VC1是与VC2链接的菜单VC。在VC2中有闹钟的设置。所以我在收到本地通知方面遇到了麻烦。
例如,如果我在VC2上设置闹钟然后我移动到VC1然后转到主屏幕我将在屏幕顶部收到通知。点击通知后,我将移至VC1,我将收到一条消息。但是我会收到一个错误'无法输入类型' MyApp.VC1' (0x10ee97730)到' MyApp.VC2' (0x10ee96bd0)&#39 ;.如果我在VC2上设置闹钟,那么我移动到主屏幕我将在屏幕顶部收到通知。点击通知后我会转到VC2,我会收到一条消息,一切都会好的。
其他问题是在VC2上设置闹钟并移至VC1而不移动到主屏幕。当我的时间到了我的应用程序时,我的应用程序崩溃了同样的错误'无法投射类型' MyApp.VC1' (0x10ee97730)到' MyApp.VC2' (0x10ee96bd0)'
func application(_ application: UIApplication, didReceive notification: UILocalNotification) {
let storageController = UIAlertController(title: "Alarm", message: nil, preferredStyle: .alert)
var soundName: String = ""
var index: Int = -1
if let userInfo = notification.userInfo {
soundName = userInfo["soundName"] as! String
index = userInfo["index"] as! Int
}
playSound(soundName)
let stopOption = UIAlertAction(title: "OK", style: .default) {
(action:UIAlertAction)->Void in self.audioPlayer?.stop()
let mainVC = self.window?.visibleViewController as! MainAlarmViewController
storageController.addAction(stopOption)
(self.window?.visibleViewController as! MainAlarmViewController).present(storageController, animated: true, completion: nil)
}
有人知道如何解决吗?
当我收到错误时,我会看到此行的重点:
(self.window?.visibleViewController as! MainAlarmViewController).present(storageController, animated: true, completion: nil)
非常感谢你!
P.S。当应用程序位于VC1中的前台或应用程序时,是否可以在屏幕顶部发出通知,并指向VC2的链接?
有时我也会收到一条消息'警告:尝试在其视图中显示不在窗口层次结构中!'
答案 0 :(得分:0)
替换此行
(self.window?.visibleViewController as! MainAlarmViewController).present(storageController, animated: true, completion: nil)
以下代码
if let viewController = self.window?.visibleViewController {
if viewController is MainAlarmViewController {
// view controller is MainAlarmViewController
} else {
// view controller is not MainAlarmViewController
}
viewController.present(storageController, animated: true, completion: nil)
} else {
print("Something wrong. Window can't provide visible view controller")
}