簡體   English   中英

從通知中心刪除Observer的最佳位置在哪里

[英]Where is the best place to remove Observer from Notification Center

我認為應該在這里:

-(void) viewWillDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];

    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc removeObserver:self];

}

或者也許是在-dealloc

這兩個聽起來都很奇怪所以我不完全確定它。

首先,在我的AppDelegate中,我通過Parse收聽遠程通知

- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo {
    [PFPush handlePush:userInfo];

    NSString * urlToGo = [userInfo objectForKey:@"url"];
    NSLog (@"Recibo notificación con paremetro url: %@", urlToGo);


    NSNotification *note = [NSNotification
                            notificationWithName:PUSH_NOTIFICATION
                            object:self
                            userInfo:userInfo];

    [[NSNotificationCenter defaultCenter] postNotification:note];

}

在myViewController中 - (void)viewDidLoad {[super viewDidLoad];

    _lastMenuSelected=menu1;

    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
    [center addObserverForName:PUSH_NOTIFICATION
                        object:nil
                         queue:mainQueue
                    usingBlock:^(NSNotification *note) {

                     // Save in property to load parameter in prepareForSegure
                        _urlToLoadFromPush = urlToGoReceivedFromPush;
                    [self showPush:self];

                    }];


}



- (void)showPush:(id)sender {

    PushViewController * pushViewController=(PushViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"PushId"];

    pushViewController.url  = _urlToLoadFromPush;
    UINavigationController* nVC=[[UINavigationController alloc] initWithRootViewController:pushViewController];
    [self presentViewController:nVC animated:YES completion:^{
        //[_delegate logout];
    }];


}

由於您似乎在viewDidLoad方法中添加了觀察者(從iOS 6開始只調用一次),因此您應該刪除dealloc方法中的觀察者。

不要刪除viewWillDisappear中的觀察者,因為通常我們需要在視圖位於堆棧中但不顯示時發布通知。 因此總是嘗試使用observer的名稱刪除 - (void)dealloc中的觀察者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM