5

Tôi muốn đăng nhập bất kỳ NSNotifications nào được đăng bởi một NSNotificationCenter được chia sẻ trên ứng dụng của tôi. Tôi đã thử phân lớp NSNotificationCenter với ý định thêm mã đăng nhập vào ba phương thức đăng bài, nhưng nó trả về một thể hiện của trung tâm CFNotification thay vì lớp con của tôi.Ghi nhật ký NSNotifications

Chắc chắn có cách giám sát đăng bài NSNotification?

EDIT/UPDATE

Như hai câu trả lời dưới đây một cách chính xác chỉ ra tôi có thể lắng nghe tất cả các thông báo và đăng chúng trong một handler, nhưng trình tự xử lý sẽ nhận được các thông báo này còn xa mới được bảo đảm để được giống như các trình tự mà chúng được gửi đi. Nếu tôi có thể chắc chắn người xử lý sẽ luôn là người xử lý đầu tiên được thông báo điều này sẽ hiệu quả, nhưng tôi không thể: 'Thứ tự mà người quan sát nhận thông báo không được xác định' Từ NSNotification Docs

Trả lời

9

Bằng cách sử dụng - addObserver:selector:name:object: và chuyển nil cho cả nameobject, bạn sẽ được thông báo về bất kỳ thông báo nào.

- (id)init 
{ 
    self = [super init]; 
    if (self != nil) 
    { 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(log:) name:nil object:nil]; 
    } 
    return self; 
} 

- (void)log:(NSNotification *)notification 
{ 
    NSLog(@"%@", notification); 
} 

Edit: nếu bạn muốn để có được thứ tự thực sự của thông báo là gửi, hãy thử subclassing NSNotificationCenter và trọng các phương pháp sau đây:

– postNotification: 
– postNotificationName:object: 
– postNotificationName:object:userInfo: 

Nếu subclassing là không có lựa chọn cho bạn, bạn có thể xem xét việc xác định danh mục trên NSNotificationCenter nơi bạn ghi đè các phương pháp này bằng cách gọi thực hiện siêu. (bạn sẽ cần phải giải quyết các phương thức để gọi siêu trong một danh mục). Cho tôi biết nếu bạn cần giúp đỡ.

+0

Cảm ơn. Nhưng vấn đề là tôi không thể đăng nhập trước khi gửi. Tôi còn lại để đăng nhập thông báo sau khi họ được gửi đi như một người quan sát ở một vị trí tùy ý trong chuỗi các quan sát được thông báo. Nếu tôi có thể đăng nhập tại điểm của công văn, tôi nhận được một ý tưởng rõ ràng hơn nhiều về chuỗi thông báo. Loại người nghe toàn cục này có thể không được thông báo cho đến khi người xử lý trước đó đã kích hoạt một chuỗi các sự kiện, có nghĩa là tôi sẽ không thể nhìn thấy thứ tự công văn, chỉ thứ tự mà người quan sát đặc biệt này nhận được. – Undistraction

+0

Kiểm tra chỉnh sửa của tôi;) –

+0

Cảm ơn. Vấn đề là khi bạn phân bổ/bắt đầu một NSNotificationCenter bạn không nhận được một trung tâm NSNotification trở lại. Bạn nhận được một CFNotificationCenter. Điều này cũng đúng với một lớp con của NSNotificationCenter. Vì vậy, chắc chắn việc thêm một danh mục vào NSNotificationCenter sẽ không giúp ích gì? – Undistraction

0

Bạn sẽ có thể sử dụng [addObserver: tự chọn: @selector (bất cứ điều gì :) tên: nil đối tượng: nil] và chỉ cần đặt mã đăng nhập của bạn trong bất cứ điều gì: phương pháp. Người quan sát này sẽ nhận được tất cả các thông báo được đăng bởi ứng dụng của bạn (ít nhất là tất cả các thông báo được đăng bởi trung tâm mặc định).

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