2016-01-21 4 views
8

今日は、私が "viewWillAppear"を呼ぶごとにそれを表示すると思ったが、そうはしなかった。私は私のアプリで何かを変更し、私は今日のビューのためにスライドダウンする時々時々、ビューを更新し、ときどきそうしない。今日はいつでもリフレッシュウィジェット

私はviewWillAppear(coreDataのデータをフェッチしてそのデータをラベルに入れます)ですべてのロジックを行いますが、毎回呼び出されるわけではありません。

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    fetchContent() 
    setLabels() 
    setContentHeight() 
    tableView.reloadData() 
    print("view will appear") 
} 

ユーザーがToday Extensionsを開くたびにfetchContentとsetLabelsを呼び出す方法は?

+0

@BabyAzerty Today Extensionは、通知センターのTodayビューに表示されるウィジェットです。 –

答えて

10

この場合、NSWidgetProvindingwidgetPerformUpdateWithCompletionHandlerを使用する必要があります。

ステップ:

1.-お使いのUIViewControllerが実装されていることを確認しNCWidgetProviding

class MainViewController: UIViewController, NCWidgetProviding 

2.-次の関数を追加:あなたは意志あなたのケースでは

func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) { 
     // Perform any setup necessary in order to update the view. 

     // If an error is encountered, use NCUpdateResult.Failed 
     // If there's no update required, use NCUpdateResult.NoData 
     // If there's an update, use NCUpdateResult.NewData 

     completionHandler(NCUpdateResult.NewData) 
    } 

3.-を.NewDataを使用してください。

必要なデータを取得して表示を更新するだけです(すべてのデータを所定の位置に置き、ラベル、グラフなどを埋めてください))。

この関数の呼び出し中にビューが表示されないということは、iOSはビューを埋めてスナップショットを作成することに注意してください。

これは、通知センターを開いているときと、アプリをもう一度制御するまで表示されます。

だから、あなたの場合にはこのようなものになるだろう:

func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)) { 
     fetchContent() 
     setLabels() 
     setContentHeight() 
     tableView.reloadData() 

     completionHandler(NCUpdateResult.NewData) 
    } 
+0

回答ありがとうございます。シミュレータではうまく動作しますが、実際のデバイスではうまく動作しません。なぜどんなアイデア? –

+1

私はビューの通知センターから今日の拡張機能を削除し、再度それをうまく機能するかどうかを確認します。恐らくいくつかのバグが現れます。 –

+0

.newDataまたは.noDataを呼び出す必要があるかどうかを判断する方法私はコアデータから3つのラベルを記入します。何も記入されていない場合、どのように私はまだ表示されてフェッチ情報を比較するのですか? –

1

スウィフト2.1 & &のXcode 7.2 あなたは多くの時間、この今日の拡張子を再コンパイルする場合、いくつかのバグが表示されますように見えます。解決策は、通知センターから削除してもう一度追加することです。開いたたびにきれいに更新されます。

+0

開発プロセス...ウィジェットのタイトルと同じですが、削除して再度追加する必要があります。それからうまくいく... –

関連する問題