2017-08-01 21 views
0

基本的に、私はAppDelegate.swiftでRefresh(ViewController.swiftにある)関数を実行しようとしています。 5時間のうちのより良い部分を検索した後、私はなぜこれが動作しているのか理解できません。ここ は私の関数である。appdelegateでviewcontrollerから関数を呼び出す方法は? (Swift)

私Appdelegate.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)" 
    } 
} 

私は主にそれを設定することでの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()を使用して新しいViewControllerをインスタンス化していることであり、それViewControllerはあなたのビューコントローラの階層に追加されません。

あなたはlet mainVC = UIStoryboard(name: "Main", bundle: "nil").instantiateViewController(withIdentifier:"ViewController") as! ViewControllerを使用してViewControllerをインスタンス化し、あなたの識別子がStoryboardに設定されていることを確認するために、Storyboardを使用する必要があります。

Storyboardを使用していない場合は、UIに表示するテキストをデータソース変数に保存し、それらの変数を 'AppDelegate'でのみ更新し、それらの変数の内容を'viewDidLoad'または 'viewWillAppear'。

+0

あなたが提供したコードを使用すると(mainVC = storyboard?.instantiateViewController(withIdentifier: "ViewController"))!ViewController)エラーが発生しました。 "未解決の識別子 'storyboard'の使用 – cdunn2013

+0

' storyboard? 'を 'UIStoryboard' –

+0

このエラーが表示されるようになりました:( NSEA 型のキャッチされていない例外で終了し、quickを使用しようとするとappdelegateでSIGABRTエラーが発生しました。(名前: "Main"、bundle: "nil") 'アクション – cdunn2013

関連する問題