NSNotification错误

时间:2014-02-07 05:21:52

标签: ios objective-c nsnotificationcenter

出于某种原因,我似乎被卡在了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];
}

我检查过的事情:

  1. 在post方法之前首先调用观察者方法(它是)
  2. 两种方法的名称都是正确的
  3. 选择器签名正确
  4. 同样看了几个SO答案,并没有帮助。

    这里有什么我想念的人吗?

    * 更新*

    抱歉 - 这是我想要的方法:

    -(void)userPickedAuserNameFromSuggestion: (NSNotification *)notification
    {
        NSLog (@"Selected Username: %@", self.usernameCell.usernameSelected);
    
    }
    

    然而它没有被称为

2 个答案:

答案 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函数中。