首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIViewController没有响应NSNotifications

UIViewController没有响应NSNotifications
EN

Stack Overflow用户
提问于 2013-08-18 20:18:58
回答 1查看 115关注 0票数 0

我有一个对UIViewController没有响应的NSNotifications。我确信由通知启动的操作是有效的。我的设置有什么问题吗?

我使用一个单例从AppDelegatedidFinishLaunching加载一个feedViewController。这个feedViewController保存一个对deckViewController的引用,而这个deckViewController可靠地发送feedViewController应该观察的通知。然而这些通知从未收到。我确保singleton保持对应该接收通知的视图控制器的强烈引用。

在保存对通知观察者的引用的singleton中:

代码语言:javascript
复制
 // .h file
 @property (nonatomic) ROFeedViewController *feedViewController;

 // .m file
 _feedViewController = [[ROFeedViewController alloc] init];
    IIViewDeckController *deckController = [[IIViewDeckController alloc] initWithCenterViewController:_feedViewController leftViewController:leftController rightViewController:rightController];
    _feedViewController.deckController = deckController;

在通知观察员(ROFeedViewControler)中:

代码语言:javascript
复制
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewDeckPanned:) name:@"ViewDeckPanned" object:_deckController];
    ...
}

- (void)viewDeckPanned:(NSNotification *)notification {
    float offset = [(NSNumber *)[notification object] floatValue];
    if (offset > 0) {
        _leftButton.transform = CGAffineTransformMakeRotation(offset * M_PI / 180.0);
    } else {
        _rightButton.transform = CGAffineTransformMakeRotation(offset * M_PI / 180.0);
    }
}

从通知发送方(IIViewDeckController)发送可靠通知:

代码语言:javascript
复制
- (void)notifyDidChangeOffset:(CGFloat)offset orientation:(IIViewDeckOffsetOrientation)orientation panning:(BOOL)panning {
    [self performDelegate:@selector(viewDeckController:didChangeOffset:orientation:panning:) offset:offset orientation:orientation panning:panning];
    [[NSNotificationCenter defaultCenter] postNotificationName:@"ViewDeckPanned" object:[NSNumber numberWithFloat:offset]];

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-18 20:26:18

你设置:

代码语言:javascript
复制
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewDeckPanned:) name:@"ViewDeckPanned" object:_deckController];

这意味着您正在侦听来自ViewDeckPanned _deckController的名称“”的通知(因为object:参数应该定义通知发件人)。

但是,在同一时间,你发布通知:

代码语言:javascript
复制
[[NSNotificationCenter defaultCenter] postNotificationName:@"ViewDeckPanned" object:[NSNumber numberWithFloat:offset]];

然后告诉NSNumber编号:偏移是发送者。由于_deckControllerNSNumber实例不匹配,所以在观察者中没有收到通知信息。

简单的更改是将nil作为object:参数传递(在这两个地方--添加观察者和发布通知),如果您想传递NSNumber和通知,那么创建包含它的userInfo字典。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18303254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档