我有一个闹钟应用程序。它有2个VC。VC1是与VC2链接的菜单VC。在VC2里有闹钟的设定。所以我很难收到本地通知。
例如,如果我在VC2上设置闹钟,然后移动到VC1,然后转到主屏幕,我将在屏幕顶部收到通知。单击通知后,我将转到VC1并收到一条消息。但我将得到一个错误“Could not cast value of type'MyApp.VC1'(0x10ee97730)to'MyApp.VC2'(0x10ee96bd0)”。如果我在VC2上设置闹钟,然后移动到主屏幕,我将在屏幕顶部收到通知。点击通知后,我将移动到VC2,我会得到一个消息,一切都会好的。
另一个问题是在VC2上设置闹钟,在不移动到主屏幕的情况下移动到VC1。什么时候我的应用程序会因为同样的错误而崩溃?无法将“my app.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.当a P P在前台或app在VC1中时,是否有可能在带有VC2链接的屏幕顶部发出通知?
有时我还会收到一条消息:“警告:试图显示其视图不在窗口层次结构中!”

最佳答案

替换此行

(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")
}

关于ios - AppDelegate中的本地通知出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42982763/

10-13 07:41