我正试着绕过NSNotificationCenter。如果我的App代表中有这样的内容:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(something:)
name:@"something"
object:nil];
-----
-(void)something:(NSNotification *) notification
{
// do something
}
我可以在另一个视图控制器中以某种方式观察它吗?在我的情况下,我想在带有表的视图控制器中观察它,然后在收到通知时重新加载表。这可能吗?
答案 0 :(得分:13)
是的,你可以这样做:
在A类中:发布通知
[[NSNotificationCenter defaultCenter] postNotficationName:@"DataUpdated "object:self];
在B类中:首先注册通知,并编写一个方法来处理它。 您将相应的选择器提供给方法。
//view did load
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleUpdatedData:) name:@"DataUpdated" object:nil];
-(void)handleUpdatedData:(NSNotification *)notification {
NSLog(@"recieved");
}
答案 1 :(得分:4)
是的,你可以这就是NSNotification
的全部目的,你只需要像你在App Delegate上那样添加你想要的观察者,它就会收到通知。< / p>
您可以在此处找到更多信息:Notification Programming
答案 2 :(得分:2)
当然有可能,这是通知的全部内容。使用addObserver:selector:name:object:
是注册接收通知的方式(您应该在表视图控制器中执行此操作),并且可以使用postNotificationName:object:userInfo:
发布来自任何类的通知。
答案 3 :(得分:2)
您可以注册以在任意数量的课程中观察通知。你只需要“冲洗并重复”。包含在视图控制器中注册为观察者的代码(可能在viewWillAppear :)中,然后从您的方法重新加载tableView:
- (void)viewWillAppear:(BOOL)animated {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(something:) name:@"something" object:nil];
}
-(void)something:(NSNotification *) notification
{
[self.tableView reloadData];
}
一旦不再需要通知,取消注册视图控制器也是个好主意:
- (void)viewWillDisappear:(BOOL)animated {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
答案 4 :(得分:1)
如果您希望Observer
在发布通知时表现不同,则应将其添加为selector
并提供不同的viewController
方法。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(somethingOtherThing:)
name:@"something"
object:nil];
-(void)somethingOtherThing:(NSNotification *) notification
{
// do something
}