私はApp Inの購入をアプリに持っています。 In Appの購入はFirstViewControllerで管理されます。ユーザーが製品を購入したとき、MainTableViewControllerに通知を送信してテーブルデータを再読み込みし、In App購入で購入した新しいオブジェクトを表示したいと思います。だから基本的に私はクラスAからクラスBへの通知を送信し、クラスBはテーブルビューのデータをリロードします。私はNSNotificationCenterを使用しようとしましたが、成功しませんでしたが、NSNotificationCenterで可能なことは分かりません。クラスAでクラスAからクラスBにNSNotificationを送信
答えて
:クラスBに通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"DataUpdated"
object:self];
を投稿:通知するための第1のレジスタ、及びそれを処理するための方法を記述する。
対応するセレクタにメソッドを渡します。
// view did load
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleUpdatedData:)
name:@"DataUpdated"
object:nil];
-(void)handleUpdatedData:(NSNotification *)notification {
NSLog(@"recieved");
[self.tableView reloadData];
}
別のスレッドから通知を送信しようとしていますか? NSNotificationは別のスレッドからオブザーバに渡されません。
別のスレッドから送信されたかどうかはどのように分かりますか? – JonasG
通知を生成する場所の[NSThread currentThread]と、通知対象のクラスの[NSThread mainThread]を比較してみてください。 –
また、オブザーバーを追加するときは、指定していないもの**オブジェクト**を確認してください。 –
私はクラスAでビンスの答え
に少しより多くの情報を追加しているOK:クラスBに通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"DataUpdated"
object:arrayOfPurchasedObjects];
を投稿:通知のために最初に登録して、へのメソッドを書きます扱う。
対応するセレクタにメソッドを渡します。通知を送信する前にクラスBが割り当てられていることを確認してください。それ以外の通知は機能しません。
- (void) viewDidLoad {
// view did load
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleUpdatedData:)
name:@"DataUpdated"
object:nil];
}
-(void)handleUpdatedData:(NSNotification *)notification {
NSLog(@"recieved");
NSArray *purchased = [notification object];
[classBTableDataSourceArray addObjectsFromArray:purchased];
[self.tableView reloadData];
}
- (void) dealloc {
// view did load
[[NSNotificationCenter defaultCenter] removeObserver:self
name:@"DataUpdated"
object:nil];
[super dealloc];
}
thxでも動作しません。また、NSUserdefaultsを使用してアプリの購入が完了したかどうかを認識するので、配列にオブジェクトを追加する必要はありません。新しい人(私)のために – JonasG
、上記の答えにタイプミスがあり、 'postNotficationName'がエラーを投げ、 'postNotificationName'(別の 'i')がそれを修正します。 (通知処理の明確化に役立ててくれたRahul Vyasに感謝します)。 – tmr
@RahulVyasの答えにタイプミスがあります。 "postNotficationName"ではありません。 "postNotificationName" –
- 1. プロパティをクラスAからクラスBにコピーする
- 2. Objective Cでは、クラスAはクラスBの代理人であり、クラスBはクラスAの代理人ですか?
- 3. 送信ファイルA-> B-> C B
- 4. クラスAからクラスBに戻り、次にメインクラスに戻りますか?
- 5. クラスAをクラスAに渡す方法クラスAをクラスBに拡張する場合
- 6. がクラスBとクラスAを拡張するが、クラスBの方法
- 7. クラスBのクラスAからJavaの配列を印刷するには?
- 8. OWL Api、親AからBにクラスを移動
- 9. スタイルクラスA +クラスBおよびクラスAのみ
- 10. NSNotificationクラスでは、スーパー
- 11. クラスBのスレッドからクラスAの関数を呼び出す[C#]
- 12. あるクラスから別のクラスにデータを送信する
- 13. asynctaskクラスから別のクラスに3リストを送信
- 14. observeValueForKeyPathでNSNotificationを送信
- 15. Java-クラスAがクラスBを呼び出すとき、クラスBでクラスAのメソッドと属性を使用するにはどうすればよいですか?
- 16. のJavaへのアクセス方法、私はクラスBのクラスAからメソッドにアクセスしたいが、私はクラスAとBを持っている
- 17. Angular2からクラスへコンポーネントを送信
- 18. クラスBのクラスAのアーリーリストを使用してください。
- 19. XPathでクラス "A"のすべてのクラス "B"を見つける
- 20. NSNotificationオブザーバーとしてのクラス?
- 21. Qtクラスからクラスへシグナルを送信します
- 22. クラスからのイベントの送信
- 23. クラスBのクラスAの地図へのアクセス
- 24. クラスaではなくクラスbであるCSSセレクタ
- 25. クラスAとBの2つのクラスがあるとします.BのAオブジェクトとAのBオブジェクトを作成できますか?
- 26. クラスAのクラスBのオブジェクトにアクセスする方法はありますか?#
- 27. クラス "A"からクラス "B"のインスタンスメソッドをどのように呼び出すのですか?
- 28. コンポーネントAからコンポーネントBにデータを送信する方法角2
- 29. クラスAのJTextField入力からクラスBのデータベースに値を挿入する方法
- 30. {a-b、b-c、c-a}から{(a、b)、(b、c)、(c、a)}に変更しますか?
は:( – JonasG
それが必要と動作しません。あなたは、クラスAは、いくつかのデータを更新した場合、これらの変更はClassBの中に反映されていることを確認してください。通知を実行するために、より多くを必要としません。あなたもClassBのAを与えることの通知を使用することができます値が返されますが、 'reloadData'はtableViewにデータソースのデータを再度要求します。 –
通知が送信されたときに{ - self} {{self.tableView reload data};}が呼び出されません。コードを修正しようとしましたが、それは助けにはなりませんでした。 – JonasG