所以基本上我试图在AppDelegate.swift中运行函数Refresh(位于ViewController.swift中)。在寻找5小时的大部分时间之后,我无法弄清楚为什么这不起作用。 这是我的功能:
func Refresh(){
if(Count==0 && QuickActionChecker==true){
Previous.text=String(TipArray[CountCurrent])
Current.text=String(TipArray[CountCurrent])
Deliveries.text="\(Runs)"
}
if(Count>0 && QuickActionChecker==true){
Previous.text=String(TipArray[CountCurrent-1])
Current.text=String(Total)
Deliveries.text="\(Runs)"
}
}
在我的Appdelegate.swift中,我通过将ViewController设置为Main来初始化它:
let Main = ViewController()
这是我尝试运行该功能的地方(强制从主屏幕触摸快速操作):
func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
if shortcutItem.type == "com.Sicarix.Ticket.Add5"{
if(CountCurrent==0){
TipArray.append(5)
Count=Count+1
CountCurrent=CountCurrent+2
Total=TipArray.reduce(0) {$0+$1}
Runs=Runs+1
QuickActionChecker=true
Main.Refresh()
}
else{
TipArray.append(5)
Count=Count+1
CountCurrent=CountCurrent+1
Total=TipArray.reduce(0) {$0+$1}
Runs=Runs+1
QuickActionChecker=true
Main.Refresh()
}
}
}
但是,当我尝试使用快捷方式时,它会将应用程序打开到白色屏幕并保持不变。控制台正在吐出:
致命错误:在解包可选值时意外发现nil
当我删除Main.Refresh()时代码运行正常,它只是不更新我的应用程序中的标签,因此需要该功能。 请帮助,我已经准备好继续过去这个bug了.... 另外请记住,我还没有快速编写一周的编码,所以请尽可能地分解错误。 TIA
答案 0 :(得分:0)
更改viewController对象
let nextVC = storyboard?.instantiateViewController(withIdentifier:"ViewController") as! ViewController
答案 1 :(得分:0)
问题是您使用ViewController
实例化新ViewController()
,并且ViewController
未添加到视图控制器层次结构中。
您需要使用Storyboard
使用ViewController
对let mainVC = UIStoryboard(name: "Main", bundle: "nil").instantiateViewController(withIdentifier:"ViewController") as! ViewController
进行实例化,并确保在Storyboard
中设置了您的标识符。
如果您没有使用Storyboard
,另一种解决方案是将您要在UI上显示的文本存储在数据源变量中,并仅在“AppDelegate”中更新这些变量,然后加载这些变量的内容放在您的标签上,并且在视频内显示了这些变量。或者' viewWillAppear'。