首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSNotificationCenter addObserver被忽略

NSNotificationCenter addObserver被忽略
EN

Stack Overflow用户
提问于 2014-04-18 13:40:37
回答 2查看 1K关注 0票数 1

两个对象在使用NSNotifications 5.1 (和CorePlot 1.4)之前接收XCode非常好。但是,使用XCode 5.1.1 (Coreket1.5),我发现如果addObserver调用在init方法中,它实际上不会被注册(仅对于这两个类,它在不同类的父对象中工作)。我甚至在调用前后放置了一个NSLog,以确保代码仍然工作。这些对象都是由它们的共享父对象强烈引用的,它们的父对象接收必要的通知而不发出任何问题。而且,我在dealloc中有一个dealloc,其中removeObserver is -it不是早期调用的,因为对象是正确保留的。

代码语言:javascript
复制
//The object is a CorePlot CPTGraphHostingView
- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        //other code setting up a few private ivar primitive arrays and values

        //this is where the call was (there are actually 3 Observer calls made)
        [[NSNotificationCenter defaultCenter]
        addObserver: self
        selector: @selector(recordUpdated)
        name: @"recordUpdated"
        object: nil];

        //then this is called before the end
        [self prepareGraph];

        //this is where I moved it
        [self startListening];
    }
    return self;
}

同样,自从我上一次用XCode 5.1 (和CorePlot 1.4)编译通知或这两个类以来,对于发送通知的对象的代码没有什么改变。在父级的init中也使用了相同的调用,并且运行得很好。我昨晚唯一的解决方案是将addObserver调用重构为一个新方法,并在init的末尾调用该方法。

然而,我不明白为什么这是必要的。有谁能想到addObserver放置在init中间的原因会被“忽略”,但在init调用的另一个方法内时,它会起作用吗?

编辑和注释:

我添加了更多的代码来显示init。我还添加了注释,它是CorePlot的一个图形视图,CorePlot最近也被更新为1.5 (我忘记了),-which可能是问题的根源。

领导齐柏林飞艇的建议,它正在重新分配,似乎是可能的。但是,从NSNotificationCenter到现在的dealloc对象的调用不是会使程序崩溃吗(注意,dealloc不是叫--我在那里有一个NSLog )?我可以很容易地通过在init中打印对象实例字符串来测试这一点,然后再打印出来。我昨晚确实测试了这个实例,但是我不认为我把这个部分复制到了init中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-18 20:11:55

每当您设置托管图形或collapsesLayers属性时,核心绘图宿主视图将作为所有通知的观察者。如果您想让我们修复,请在问题跟踪器上发布一份错误报告。

同时,在设置图形之后添加您的观察者。

票数 1
EN

Stack Overflow用户

发布于 2014-04-18 13:48:25

在订阅通知中心之后,self可能会被重新分配。你能把代码移到

代码语言:javascript
复制
-(void)awakeFromNib
{
    [[NSNotificationCenter defaultCenter]addObserver: self  selector:@selector(recordUpdated) name:@"recordUpdated" object:nil];
}

或者-viewDidLoad

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

https://stackoverflow.com/questions/23155375

复制
相关文章

相似问题

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