2014-01-14 78 views
1

我想在觀察通知接收的課程之外註冊通知觀察員。爲該課程以外的班級註冊通知觀察員

我試圖做這樣的:

[[NSNotificationCenter defaultCenter] 
     addObserver:[ViewController class] 
     selector:@selector(NotificationReceived:) 
     name:@"notification" object:nil]; 
然而

,這迫使我做出的ViewController類NotificationReceived方法是+(void)而不是-(void)像我想這是

有一種將ViewController註冊爲ViewController類之外的通知觀察器的方法?

回答

2

你必須創建一個類的實例,並保持它活在內存中,這樣的:

UIViewController *myViewController = [[UIViewController alloc] init]; 
[[NSNotificationCenter defaultCenter] addObserver:myViewController 
             selector:@selector(NotificationReceived:) 
              name:@"notification" 
              object:nil]; 

記住觀察者被釋放之前未註冊的觀察者,否則你的應用程序將crash

還是在斯威夫特3:

let myViewController = UIViewController() 
NotificationCenter.default.addObserver(
    myViewController, 
    selector: #selector(NotificationReceived), 
    name: Notification.Name("notification"), 
    object: nil) 
+0

但系統應該創建一個實例對我來說,因爲它是一個視圖 - 控制 –

+1

@LenaBru ???不,這個說法沒有意義。沒有什麼特別的關於viewControllers,像所有其他類,你必須創建一個實例 –

+0

如果我在通知的註冊創建實例,我沒有收到通知.....在我需要在運行時的類 –

2

張貼通知:

[[NSNotificationCenter defaultCenter] postNotificationName:@"notificationName" object:nil]; 

對於任何視圖添加觀察:

// Add observer 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(yourmethod) name:@"notificationName" object:nil];