1

所以我有一个类,它在初始化时将自己添加为 NSNotificationService 中的观察者,并且在 dealloc 上将自己从 NSNotificationCenter 中删除。

一切正常,我发布通知并收到它一次并带有正确的对象。

然后我做了一个循环并添加了三个视图。每个视图都被调用一次,所有视图都将自己添加为观察者。

现在,当我发布通知时,每个视图都会收到 3 次通知!(共 9 个)

所以我将我的添加观察者移动到另一个方法,并且只在两个视图(来自这三个)上调用它。

现在每个视图都被调用了两次(三个视图被调用了两次,总共 6 个),尽管第三个实例甚至没有被添加为观察者(观看了 metgod,没有按预期被调用)。

现在我删除了循环并创建了三个视图。并且只添加了一个作为观察者。三个人都叫了...

这是已知问题还是我发现了新问题?

XCode 4.6 iOS 6.1

更新 - - - - - - - -

问题是,我的视图实际上只是一个实例。

此代码生成三个视图,它们都是相同的一个视图。

CustomViewController * hw1 = [[CustomViewController alloc] init];

    [hw1 setupWithFrame:CGRectMake(
                                contentScrollView.frame.size.width * 0 + contentScrollView.frame.size.width/2 - 250 ,
                                contentScrollView.frame.size.height / 2 - 250,500,500)];

    [contentScrollView addSubview:hw1.view];

CustomViewController * hw2 = [[CustomViewController alloc] init];

[hw2 setupWithFrame:CGRectMake(
                               contentScrollView.frame.size.width * 1 + contentScrollView.frame.size.width/2 - 250 ,
                               contentScrollView.frame.size.height / 2 - 250,500,500)];

[contentScrollView addSubview:hw2.view];

CustomViewController * hw3 = [[CustomViewController alloc] init];

[hw3 setupWithFrame:CGRectMake(
                               contentScrollView.frame.size.width * 2 + contentScrollView.frame.size.width/2 - 250 ,
                               contentScrollView.frame.size.height / 2 - 250,500,500)];

[contentScrollView addSubview:hw3.view];

更改 hw1 中的内容,更改 hw2 和 hw3 中的内容。

SetupWithFrame 只是一种分配和添加已定义框架的子视图的方法。

4

3 回答 3

0

每次在添加观察者之前删除您的观察者。它显然被多次添加

于 2013-03-15T09:23:57.490 回答
0

这是您的问题根源:

hw1您在循环中创建了,hw2的三个实例hw3 并将它们添加到[contentScrollView addSubview:.

所以你的 contentScrollView 现在总共有九个子视图,每个子视图都有自己的观察者。

这就是为什么您的通知会被观察九次。

于 2013-03-15T09:40:37.413 回答
0

循环在这里:

当我创建一个视图 A 并将其设置为观察来自 Data 的调用时,A 告诉 Data 进行更新。

现在视图 B 也被设置为观察者并告诉数据更新。

最后,Data 被告知要更新 3 次,因为它更新了,所以它告诉所有观察者新数据(3 次),并且所有视图的行为都是相同的(毕竟不是同一个实例),因为它们接收到用于其他视图的数据。

于 2013-03-15T09:52:27.363 回答