2017-08-01 57 views
0

所以基本上我試圖在AppDelegate.swift中運行Refresh(位於ViewController.swift)函數。在搜索了5個小時的更好的部分後,我無法弄清楚爲什麼這不起作用。 這裏是我的功能:如何從appdelegate中的viewcontroller調用函數? (Swift)

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:

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

然而,當我嘗試使用它的快捷方式打開應用到白色屏幕和在那裏停留。控制檯吐出:

fatal error: unexpectedly found nil while unwrapping an Optional value

代碼運行正常,當我刪除Main.Refresh(),它只是沒有在我的應用程序更新標籤,因此對於功能的需求。 請幫助,我準備好繼續前進這個錯誤.... 也請記住,我甚至還沒有在一個星期內快速編碼,所以請分解什麼是最好的錯能夠。 TIA

+0

你是如何定義數組的? – farzadshbfn

+1

在Swift中,變量和方法名應該以小寫字母開頭。 – Moritz

回答

0

更改您的viewController對象

let nextVC = storyboard?.instantiateViewController(withIdentifier:"ViewController") as! ViewController 
0

的問題是,你正在使用ViewController()實例化一個新的ViewControllerViewController不添加到您的視圖控制器層次。

您需要使用您的Storyboard實例化ViewController使用let mainVC = UIStoryboard(name: "Main", bundle: "nil").instantiateViewController(withIdentifier:"ViewController") as! ViewController並確保您的標識符設置在Storyboard

如果您不使用Storyboard,另一種解決方案是將要在UI中顯示的文本存儲在數據源變量中,並只更新'AppDelegate'中的這些變量,然後將這些變量的內容加載到標籤中'viewDidLoad'或'viewWillAppear'。

+0

當我使用你提供的代碼(讓mainVC = storyboard?.instantiateViewController(withIdentifier:「ViewController」)爲!ViewController)它給了我錯誤「使用未解析的標識符'故事板' – cdunn2013

+0

只需將'storyboard?'更改爲'UIStoryboard (名稱:「Main」,bundle:「nil」)',看到我的更新回答。 –

+0

現在我得到這個錯誤:( 終止與未捕獲異常的類型NSException 和SIGDEBTT錯誤,當我嘗試使用快速?動作 – cdunn2013

相關問題