如何将self.TableView方法传递给NotificationCenter的addObserver

时间:2011-11-13 09:17:52

标签: objective-c ios

如何指定在通知中调用someController.tableView reloadData?

重新加载包装器的实现是:

- (void) reloadTableAsContentsHasChanged
{
    [self.tableView reloadData];
}

并且对Notofication中心的AddObserver参数的调用现在实现为:

addObserver: self selector: @selector( reloadTableAsContentsHasChanged )

它可以正常工作但不需要包装器。我尝试了几种符号,但我无法做到。应该可以在没有包装器的情况下传递self.tableView的reloadData方法。

3 个答案:

答案 0 :(得分:1)

这是NSNotificationCenter基于块的API的工作。

假设self将成为发布此通知的对象......

id observer = [[NSNotificationCenter defaultCenter] 
    addObserverForName:@"SomeNotificationName"
                object:self
                  queue:nil
             usingBlock: ^(NSNotification *note){[self.tableView reloadData];}

并且当您不再需要收听此通知时,请记得取消注册并释放observer

答案 1 :(得分:0)

您可以像这样添加观察者:

[[NSNotificationCenter defaultCenter] addObserver: someController.tableView selector: @selector(reloadData) name: @"someName" object: self];

但你为什么不这样做呢:

[someController.tableView reloadData];

答案 2 :(得分:0)

[[NSNotificationCenter defaultCenter] addObserver:tableView selector:@selector(reloadData) name:notificationName object:self];

应该有效(如果没有,那么Apple可能由于某种原因导致无法直接通知UITableView)。不要忘记在释放时从观察者中删除tableView

[[NSNotificationCenter defaultCenter] removeObserver:tableView];