ios - 仅返回 nil 的类的实例
问题描述
对 Swift 来说相当陌生,并且在努力在另一个类中创建一个类的实例。我正在触发一个通知,然后在我的应用程序委托中,它通过播放音乐播放器并更改我的 viewController 中的标签来响应,但是当它尝试更改标签时,应用程序崩溃并出现错误“在隐式展开可选值时意外发现 nil”。我可以通过添加“?”来绕过它 但为什么它会为零。
代码
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, AVAudioPlayerDelegate {
var musicPlayerManager: MusicPlayerManager = MusicPlayerManager()
var viewController: ViewController = ViewController()
func application(_ application: UIApplication, didReceive notification: UILocalNotification) {
//show an alert window
var playlistName: String = ""
if let userInfo = notification.userInfo {
playlistName = userInfo["soundName"] as! String
}
musicPlayerManager.playPlaylist(chosenPlaylist: playlistName)
print(playlistName)
viewController.currentPlaylist.text = "Playlist: \(playlistName)"
}
}
我在控制台中打印了 playlistName,然后它崩溃,最后一行表明这是 viewController 实例的问题,并且我尝试从应用程序委托更改视图控制器中的标签。
解决方案
在 vc 加载之前,出口为零,如果它存在,您还需要从情节提要中加载它
viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "id") as! ViewController
viewController.view.layoutIfNeeded()
viewController.currentPlaylist.text = "Playlist: \(playlistName)"
推荐阅读
- angular - 如何将垂直网格线添加到 ag-Grid?
- javascript - 如何将 antlr/index 加载到 ace worker js 文件中?
- django - Django rest框架序列化器 - 多次序列化单个模型字段
- docker - 在 Docker 容器中运行 Docker:无法连接到 Docker 守护进程
- javascript - Vue-js 深度观察
- java - 泛型方法参数行为
- html - 如何结合这两个重写规则?
- r - 如何修复综合控制方法中的不平衡数据?
- c - 使用 strstr 和 strchr 效率低下
- android - 将项目添加到顶部时,我不想更新 ListView