2012-01-17 23 views
15

Tôi có đoạn mã sau cho biết thêm một người quan sát trong quá trình tải chế độ xem.Xóa Trình theo dõi khi sử dụng addObserverForName: usingBlock

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [[NSNotificationCenter defaultCenter] addObserverForName:@"com.app.livedata.jsonupdated" 
                 object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notif) { 
                  NSLog(@"JSONUPDATED"); 
                 }]; 
} 

Và điều này phát sinh tốt. Tuy nhiên khi xem được dỡ bỏ và tôi xác nhận dealloc được gọi là thông báo vẫn còn bắn.

Dường như không có phương pháp hủy kích hoạt người quan sát này?

Trả lời

25

Dường như giải pháp là theo dõi đối tượng trong Chế độ xem và sau đó bạn có thể tham chiếu trong đối tượng dealloc.

id observer = [[NSNotificationCenter defaultCenter] addObserverForName: /* ... */ ]; 

Và sau đó loại bỏ như sau:

[[NSNotificationCenter defaultCenter] removeObserver:observer]; 
observer = nil; 
+1

này không hoạt động nếu có cùng quan sát ở 2 lớp khác nhau và các quan sát viên không bao giờ bị loại bỏ: / –

Các vấn đề liên quan