10

ユーザーがiPhone/ホストアプリのテーブルビューをタップしたときにウォッチに値を表示するためだけにウォッチアプリを作成しています。

shared の値が変更されたという通知を受け取りたいUserDefaultです。これは WatchKit アプリと iOS (ホスト) アプリの間で共有されるため、ユーザーがホスト アプリに変更を加えると、通知を受け取ることが期待されます。私は次のことをしました:

ユーザーがアプリケーション (ホスト アプリ) で何らかのアクションを実行する場合:

NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.app"];
id object = [self.plantsArray objectAtIndex:[self.plantsTable indexPathForSelectedRow].row];
[shared setObject:object forKey:@"data"];
[shared synchronize];

Watchkit 拡張機能で、通知用に登録しました。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(print) name:NSUserDefaultsDidChangeNotification object:nil];

残念ながら通知が来ないのですが、解決策はありますか?

4

2 に答える 2

3

iOS にはアプリと拡張機能の間の機能がないと思いますdistributed notifications。通知は両方の間で機能しません。代わりに、両方が変更を監視できる方法を見つける必要があります。たとえば、ファイル。

既に を作成groupしているので、ファイルをグループ フォルダーに保持してfilewatcher拡張子を追加し、アプリからファイルを更新しfilewatcherて変更をキャッチすれば、作業は完了です。

こちらのfilewatcherコードを参照してください

それが役に立てば幸い。

乾杯。

アップデート

File watcher Swift version ここを見つけてください。@rivera追加していただきありがとうございます。

于 2015-01-06T09:50:13.603 に答える
2

以下を提供するMMWormHoleを試すことができます。

  • iOS デバイスと時計の間のチャネルで、両者の間でデータを送受信できます。
  • また、自分でファイル監視を処理する必要なく、通知を行う方法も提供します。

それを使用すると、アプリで通知を行うために必要なすべてのコードになります

[self.wormhole passMessageObject:@{@"buttonNumber" : @(1)} identifier:@"button"];

[self.wormhole listenForMessageWithIdentifier:@"button" 
  listener:^(id messageObject) {
    self.numberLabel.text = [messageObject[@"buttonNumber"] stringValue];
}];
于 2015-11-19T10:03:38.360 に答える