出于某种原因,我似乎被卡在了NSNotification上。
我在IBAction按钮方法中发布通知。当用户点击该按钮时,我希望收到有关它的通知,以便我可以在文本字段中设置文本。没有他们点击按钮,NSString仍然是零 - 这就是为什么我需要知道他们什么时候这样做。
所以在按钮方法中我有这个:
- (IBAction)suggestionsButton:(UIButton *)sender {
self.usernameSelected = sender.titleLabel.text;
[[NSNotificationCenter defaultCenter] postNotificationName:@"UserTappedButton" object:self];
}
这是在UITableviewCell类中。
然后我在视图控制器中添加了与此操作有关的观察者:
(void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(userPickedAuserNameFromSuggestion:) name:@"UserTappedButton" object:nil];
}
我检查过的事情:
同样看了几个SO答案,并没有帮助。
这里有什么我想念的人吗?
* 更新*
抱歉 - 这是我想要的方法:
-(void)userPickedAuserNameFromSuggestion: (NSNotification *)notification
{
NSLog (@"Selected Username: %@", self.usernameCell.usernameSelected);
}
然而它没有被称为
答案 0 :(得分:2)
将-addObserver:
放在viewDidAppear
和-removeObserver:
中viewDidDisappear
- (void)viewDidAppear:(BOOL)animated
{
//...
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(userPickedAuserNameFromSuggestion:)
name:@"UserTappedButton"
object:nil];
//...
}
- (void)viewDidDisappear:(BOOL)animated
{
//...
[[NSNotificationCenter defaultCenter] removeObserver:self
name:@"UserTappedButton"
object:nil];
//...
}
答案 1 :(得分:0)
我认为你的Notification观察者没有正确发布,你需要这样做:
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UserTappedButton" object:nil];
在dealloc
函数中。