所以我有一个类在init上的NSNotificationService中将自己添加为观察者,而dealloc将自己从NSNotificationCenter中删除。
一切都很好,我发布通知并接收一次并使用正确的对象。
然后我做了一个循环并添加了三个视图。每个视图都被称为init一次,所有视图都将自己添加为观察者。
现在,当我发布通知时,每个视图都会收到三次通知! (总共9个)
所以我将我的添加观察者移动到另一个方法并仅在两个视图(从这三个视图)调用它。
现在每个视图都被调用两次(三次视图被调用两次,总共6次)虽然第三个实例甚至没有被添加为观察者(观看了metgod,没有按预期调用)。
现在我删除了循环并创建了三个视图。并且只添加了一个作为观察者。这三个人都被称为......
这是已知的问题还是我找到了新的东西?
XCode 4.6 iOS 6.1
UPDATE ---------------
问题是,我的视图实际上只是一个实例。
此代码生成三个视图,它们都是同一个视图。
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只是一个分配和添加已定义帧的子视图的方法。
答案 0 :(得分:0)
每次在添加观察者之前移除观察者。 它显然被多次添加
答案 1 :(得分:0)
以下是问题的根源:
您在循环中创建了hw1
,hw2
,hw3
的三个实例,并将其添加到[contentScrollView addSubview:
。
因此,您的contentScrollView现在总共有9个子视图,每个子视图都有自己的观察者。
这就是为什么你的通知会被观察九次。
答案 2 :(得分:0)
解决了这个问题。也很简单。
循环在这里:
当我创建一个视图A并将其设置为观察来自Data的调用时,A告诉Data要更新。
现在视图B也被设置为观察者并告诉数据更新。
最后,数据被告知要更新三次,并且自更新以来它告诉所有观察者有关新数据(三次)和所有视图都采取相同的行动(毕竟不是同一个实例),因为他们收到的数据是其他观点。
感谢闪电帮助!你的问题解决了地雷。