2013-07-21 18 views
1

有沒有方法可以在方法所在的類以外的類中添加觀察者?我可以在全球添加的東西。在同一類中添加和發佈'NSNotificationCenter'

我試過下面這樣的東西,但它不起作用。請建議一個方法來做到這一點? 這是在HomeVC.m,我也發佈這個類的通知。

UIStoryboard *storybrd = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
HomeViewController *controller =[storybrd instantiateViewControllerWithIdentifier:@"VC123"]; 

[[NSNotificationCenter defaultCenter] addObserver:controller selector:@selector(somethingHappens:) name:@"notificationName" object:nil]; 

這種方法在VC123.m

- (空)somethingHappens:(NSNotification *)通知{}

+0

這是正確的檢查你的'controller'是不是'nil'也爲什麼你使用'HomeViewController * controller'如果它的'VC123'? –

+0

您是否在發佈通知後添加觀察者? – holex

+0

不。我在viewDidLoad方法中添加了觀察者,我在同一個類中通過IBACTION發佈了通知。 – user2603567

回答

0

當你這樣做:

HomeViewController *controller =[storybrd instantiateViewControllerWithIdentifier:@"VC123"]; 

你得到一個新的控制器實例。如果這是第一次,你保留該實例並重用它,那就沒問題。但是你可能做的不是保持它,所以它被破壞了。這通常會導致崩潰(除非控制器在其被銷燬之前以觀察者的身份自行刪除,它應該)。

您可以添加任何實例作爲觀察者,它不需要專門從類內部實現,您只需要它的一個實例 - 並且該實例應該是現有實例,而不是新的實例創建。

相關問題