5

だから私はアプリ内購入のあるアプリを持っています。アプリ内購入は FirstViewController で管理されます。ユーザーが製品を購入したら、MainTableViewController に通知を送信して、テーブル データをリロードし、アプリ内購入で購入した新しいオブジェクトを表示したいと考えています。基本的に、クラスAからクラスBに通知を送信し、クラスBがテーブルビューのデータをリロードします。NSNotificationCenter を使用してみましたが、成功しませんでしたが、NSNotificationCenter で可能であることはわかっていますが、方法がわかりません。

4

3 に答える 3

27

クラス A : 通知を投稿する

[[NSNotificationCenter defaultCenter] postNotificationName:@"DataUpdated"
                                                        object:self];

クラス B : 最初に通知を登録し、それを処理するメソッドを記述します。
メソッドに対応するセレクターを指定します。

// view did load
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(handleUpdatedData:)
                                             name:@"DataUpdated"
                                           object:nil];

-(void)handleUpdatedData:(NSNotification *)notification {
    NSLog(@"recieved");
    [self.tableView reloadData];
}
于 2011-07-25T11:29:28.593 に答える
8

わかりました、ヴィンスの答えにもう少し情報を追加します

クラス A : 通知を投稿する

[[NSNotificationCenter defaultCenter] postNotificationName:@"DataUpdated"
                                                   object:arrayOfPurchasedObjects];

クラス B : 最初に通知を登録し、それを処理するメソッドを記述します。
メソッドに対応するセレクターを指定します。通知を投稿する前に、クラス 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];
 }
于 2011-07-25T12:14:33.867 に答える
0

別のスレッドから通知を送信しようとしているのではないでしょうか。NSNotificationは、別のスレッドからオブザーバーに配信されません。

于 2011-07-25T12:09:38.673 に答える