将NSNotification从类发送到B类

时间:2011-07-25 11:24:05

标签: objective-c ios nsnotificationcenter nsnotification

所以我有一个购买In App的应用程序。 In App购买在FirstViewController中管理。当用户购买产品时,我想向我的MainTableViewController发送通知以重新加载表数据并显示在In App购买中购买的新对象。所以基本上我想要从A类发送到B类的通知,然后B类重新加载tableview的数据。我曾尝试使用NSNotificationCenter,但没有成功,但我知道它可能与NSNotificationCenter我只是不知道如何。

3 个答案:

答案 0 :(得分:25)

在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];
}

答案 1 :(得分:8)

好的我正在为vince的回答添加更多信息

在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];
 }

答案 2 :(得分:0)

也许你试图从另一个线程发送通知? NSNotification将不会从另一个线程传递给观察者。