0

我正在尝试在我的Storyboard.

当我不使用情节提要时,此代码有效。

这是在 ViewController1 中:

- (IBAction) buttonClickedListener2:(id)sender {
    [[NSNotificationCenter defaultCenter]
     postNotificationName:@"TestNotification"
     object:self];
}

这是在 ViewController2 中:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(receiveTestNotification:)
                                                     name:@"TestNotification"
                                                   object:nil];

        NSLog(@"initWithNib");
    }
    return self;
}

- (void) receiveTestNotification:(NSNotification *) notification
{
    // [notification name] should always be @"TestNotification"
    // unless you use this method for observation of other notifications
    // as well.

    if ([[notification name] isEqualToString:@"TestNotification"])
        NSLog (@"Successfully received the test notification!");
}

代码有什么问题吗?正如我所说,我想让它在我的故事板中工作。

如果你能给我一些关于如何在STORYBOARD.

4

3 回答 3

3

你应该添加观察者不是 ininitWithNibName而是 in awakeFromNibinitWithNibName不要求故事板。

例如:

- (void)awakeFromNib {
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(receiveTestNotification:)
                                                 name:@"TestNotification"
                                               object:nil];
}
于 2012-10-23T11:43:12.753 回答
2

故事板不使用initWithNibName,因此您添加观察者的代码部分不会运行。您应该能够通过设置断点来看到这一点。解决方法是更换

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self){
        //statements
    }
    return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self){
        //statements
    }
    return self;
}
于 2012-10-23T11:28:14.667 回答
0

代码看起来不错。

这里的问题可能是,您Notification从发帖ViewController1并将其添加NotificationViewController2.

发帖前检查是否Notification已正确添加,可能是notification您尝试发布时未添加notification

另一件事只是正确调试检查是否initWithNibName被调用。我认为故事板不使用initWithNibName,所以你应该使用initWithCoder:(NSCoder *)aDecoder而不是 initWithNibName。

于 2012-10-23T11:23:09.287 回答