tôi có mã tiếp theo:removeObserver không làm việc
@implementation SplashViewVC
- (void)viewDidLoad
{
[super viewDidLoad];
self.splashView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Default.png"]];
self.activityIndicator.originY = 355.f;
[[NSNotificationCenter defaultCenter] addObserverForName:NCDownloadComplete object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *n){
NSInteger errorCode = [n.userInfo[@"errorCode"] integerValue];
[self.activityIndicator stopAnimating];
if (errorCode == ERROR_CODE_NO_CONNECTION) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Some problem with server" delegate:self cancelButtonTitle:@"try again" otherButtonTitles:nil];
[alertView show];
} else if (errorCode == 0) {
[self dismissViewControllerAnimated:YES completion:nil];
}
}];
[self downloadData];
}
- (void)downloadData
{
[self.activityIndicator startAnimating];
[[Server sharedServer] getMovieData];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
[self downloadData];
}
- (void)viewDidDisappear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super viewDidDisappear:animated];
}
@end
Vì vậy, tôi đặt breakpoint tại bắt đầu của viewDidLoad
phương pháp, trong viewDidDisappear
. Khi tôi khởi chạy ứng dụng, trước tiên hãy truy cập viewDidload
, sau khi tải xuống, hãy truy cập viewDidDisappear
.
Nhưng trong ứng dụng của tôi, tôi lại tải xuống dữ liệu và đăng notification: NSDownloadComplete
. Và trong VC này nó là công việc, nhưng tôi sau gỡ bỏ sử dụng:
[[NSNotificationCenter defaultCenter] removeObserver:self]
VC này sử dụng viewDidLoad
một lần vào đầu & không thể một lần nữa addObserver.
Điều gì là sai?
EDIT tôi cố gắng đưa addObserver phương pháp để viewWillAppear
hoặc viewWillDisappear
- không có kết quả. tôi thêm NSLog(@"addObserver");
trước
[[NSNotificationCenter defaultCenter] addObserverForName...
trong viewDidLoad
và viết
- (void)viewDidDisappear:(BOOL)animated
{
NSLog(@"removeObserver");
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super viewDidDisappear:animated];
}
Trong log tôi thấy:
2013-06-10 14:32:05.646 myApp[9390:c07] addObserver
2013-06-10 14:32:06.780 myApp[9390:c07] removeObserver
gì sai?
EDIT 2 bạn có thể thấy rằng người quan sát phải được loại bỏ nhưng nó lại chạy khối trong phương pháp addObserver
đó là mã bản sao & dán? Tôi chỉ tự hỏi vì 'viewDidLoad' của bạn chỉ là 3 dòng và sau đó có các câu lệnh không có trong bất kỳ phương thức nào. Đó không phải là hợp lệ;) – HAS
@HAS tất cả công việc tốt, ngoại trừ câu hỏi của tôi =) – user2213271
Xin lỗi, nhưng đó không phải là;) Dấu ngoặc nhọn sau 'self.activityIndicator.originY = 355.f;' là sai. Xóa và bạn sẽ có mã hợp lệ;) – HAS