0

私はAppleのマニュアルを見て多くを検索しましたが、これを行う方法に関するコードや具体的な説明は見つかりません。iOS 10の今日のウィジェット拡張機能をホストアプリケーションのデータで更新するには?

ユーザーが特定のviewControllerを開いたときにデータをウィジェットに送信し、ウィジェットのビューを更新して新しいデータを表示したいとします。

私が試してみました:

  1. は、通知を追加します。 (アプリから投稿されたウィジェットコードでは起動しませんでした)
  2. アプリ内にシングルトンオブジェクトを持ち、プロパティを更新し、ウィジェットからデータをフェッチします。

が、私はウィジェット内のビューを更新扱ってきたが、私はウィジェットを更新したいとき、これは呼び出されません(これは部分的に動作しますが、ウィジェットが更新されることはありません)(理由は企業秘密のいくつかの値を変更):

- (void) widgetPerformUpdateWithCompletionHandler:(void (^)(NCUpdateResult))completionHandler { 
NSDictionary *data = [[SINGLETON sharedInstance] getData]; 

if(_data == nil && data == nil) { 
    _showData = NO; 
    completionHandler(NCUpdateResultNoData); 
} else if(_data != nil && [_data isEqual:data]) { 
    _showData = YES; 
    completionHandler(NCUpdateResultNoData); 
} else if(data == nil) { 
    _data = nil; 
    _showData = NO; 
    [self updateView]; 
    completionHandler(NCUpdateResultNewData); 
} else { 
    _data = data; 
    _showData = YES; 
    [self updateView]; 
    completionHandler(NCUpdateResultNewData); 
} 
} 

[自己updateView]は_showData(2つの異なるビュー、データ及びデータなしいずれかを示すもの)に基づいて、ウィジェットのビューを更新しています。

ウィジェットにデータを送信する方法(ホストアプリケーションのviewControllerから)と、データの送受信時にウィジェットのビューを更新する方法について、単純なコード例(appとwidgetの両方)を教えてもらえますか?

答えて

2

共有コンテナにデータを保存することで、アプリとウィジェットの間でデータを渡すことができます。あなたのアプリはそのコンテナにデータを書き込むことができ、あなたのウィジェットはそれをそこから読み取ることができます。

この質問を例(質問と回答の両方)で確認してください。 Sharing data between an iOS 8 share extension and main app

または、このチュートリアルをご覧ください。 https://www.youtube.com/watch?v=h3qUsjUMj74

ObjCチュートリアル(注意事項#5以降を参照)。 http://www.glimsoft.com/06/28/ios-8-today-extension-tutorial/

+0

ありがとう!何らかの理由で、iOS 10の拡張機能でNSUserDefaults(グループ)を使用すべきではないと思ったので、YouTubeの映画は本当に役に立ちました。 – Otziii

+0

YouTubeのビデオはもう利用できないようです。それをオンラインに戻すチャンスはありますか? – valeCocoa

関連する問題