2012-03-13 41 views
8

Tôi cố gắng để gọi một phương thức trong một UIView từ appdelegate sử dụng NSNotificationCenter vô ích ..postNotificationName không gọi phương pháp quan sát

AppDelegate.m

[[NSNotificationCenter defaultCenter] postNotificationName:@"ProcessDidComplete" object:items]; 

Sau đó qua MainStoryboard, giao diện chính là nạp lớp mà điều khiển là MainViewController

trong MainViewController.h viewDidLoad tôi có

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ProcessDidComplete:) name:@"ProcessDidComplete" object:nil]; 

và sau đó là phương pháp

- (void) ProcessDidComplete:(NSNotification *)pNotification 

nhưng nó không bao giờ được gọi.

Cảm ơn bạn đã trợ giúp!

+1

Vì vậy, bạn đăng thông báo và _after_ rằng bạn đăng ký một người quan sát cho nó? – JiaYow

Trả lời

15

chỉ cần thay đổi một cách ..

Đầu tiên thêm quan sát viên

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ProcessDidComplete:) name:@"ProcessDidComplete" object:nil]; 

Rồi Đăng thông báo

[[NSNotificationCenter defaultCenter] postNotificationName:@"ProcessDidComplete" object:items]; 

Cuối cùng tháo trong viewWillDisappear

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"ProcessDidComplete" object:nil]; 
+1

Woah! nhanh quá. Cảm ơn vì đã trả lời. Bạn chỉ cho tôi đi đúng hướng. postNotificationName đang được gọi trước khi người quan sát được tạo ra, do đó, bây giờ câu hỏi là .. có tính đến tôi tải các khung nhìn bằng cách sử dụng bảng phân cảnh, làm thế nào tôi có thể làm cho nó vào addObserver trước khi gửi notificacion như postNotificationName được gọi trong AppDelegate của didFinishLaunchingWithOptions và người quan sát được thêm vào trong viewDidLoad từ MainView .. cảm ơn trước – spacebiker

+0

Tôi chưa triển khai bảng phân cảnh..Bạn nên thử addobserver trong phương thức appdidfinishlaunching. – Rams

4

Mã của bạn trông ổn , điều này khiến tôi tự hỏi nơi nào trong ứng dụng của bạn ủy quyền bạn đăng thông báo?

Nếu bạn đăng thông báo trước khi thêm người quan sát vào bộ điều khiển chế độ xem, thì thông báo sẽ không bao giờ được nhận. Bạn không thể gửi tin nhắn trực tiếp tới bộ điều khiển chế độ xem chính, tức là, với tư cách là thuộc tính, thay vì sử dụng thông báo?

+0

hi mate, cảm ơn bạn đã trả lời. thông báo được đăng trong didFinishLaunchingWithOptions và người quan sát được tạo trong khung nhìn ViewDidLoad của MainView, bởi vì tôi đang sử dụng bảng câu chuyện, MainView được tải quá muộn. Bạn có gợi ý nào không ? – spacebiker

0

Chỉ muốn lưu ý ở đây rằng iOS tên thông báo là case-sensitive:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handUpdate:) name:@"scheduleUpdated" object:nil]; 

sẽ không đáp ứng:

[[NSNotificationCenter defaultCenter] postNotificationName:@"ScheduleUpdated" object:items]; 

(như tôi đã dành 20 phút cuối cùng tìm ra. ..)

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