2013-03-15 55 views
1

因此,我有一個類,它將自己添加爲NSNotificationService中的觀察者,並將其自身從NSNotificationCenter中移除。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

你可以發佈示例代碼?如何添加觀察者? – 2013-03-15 09:21:33

+0

你一定做錯了什麼...... – 2013-03-15 09:23:24

+0

好吧,所以我發現所有這些視圖實際上只是一個實例,即使我每次都使用[[View alloc] init]創建它們。 – avuthless 2013-03-15 09:23:58

回答

0

解決了這個問題。也很簡單。

循環在這裏:

當我創建了一個視圖A和將其設置爲從觀察數據呼叫,A告訴數據進行更新。

現在視圖B也被設置爲觀察者並告訴數據更新。最後,數據被告知要更新三次,並且因爲它更新了它告訴所有觀察者關於新數據(三次)和視圖都是相同的行爲(畢竟不是同一個實例),因爲他們收到的數據意味着爲其他觀點。

感謝您的閃電幫助!你的問題解決了地雷。

0

每次在添加觀察者之前刪除您的觀察者。 它顯然被多次添加

+0

)試過了(我的作業是用谷歌做的)它沒有幫助 – avuthless 2013-03-15 09:25:51

+0

我們需要添加觀察者的代碼以及它的編寫方法你然後 – 2013-03-15 09:29:41

0

這是你的問題的根本:

你在一個循環中創建的hw1hw2hw3三個實例,並將它們添加到[contentScrollView addSubview:

因此,您的contentScrollView現在總共有9個子視圖,每個子視圖都有自己的觀察者。

這就是爲什麼您的通知被觀察到9次。

+0

這個更新代碼不再是一個循環,當出現循環時,一次只能添加一個視圖 – avuthless 2013-03-15 09:41:44

+0

所以現在有多少次3或仍然是9? – 2013-03-15 09:47:29

相關問題