0

我正在将观察者添加到 init 方法中。由于它不会多次调用,我在添加它之前删除了观察者。即使那样,调用的次数与加载视图的次数一样多。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {

        [[NSNotificationCenter defaultCenter] removeObserver:self];

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

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

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

        t=[[Theme alloc] init];
        // Custom initialization
    }
    return self;
}

我也尝试在 updateStuff 方法中删除它

-(void)updateStuff
{
    [MBProgressHUD hideAllHUDsForView:self.view animated:YES];
    NSLog(@"Market Watch update stuff called $$$$$$$----------------------");
    [self initNetworkCommunication];

    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

也尝试在这里删除。

-(void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"appDidBecomeActive" object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"appDidEnterBackground" object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIDeviceOrientationDidChangeNotification" object:nil];
}

还尝试在 viewWillDisappear 中删除它工作正常,但在这里将观察者添加到 viewWillAppear 不起作用。

当我锁定屏幕并解锁它时,这个观察者应该调用。因为它在 appDidBecomeActive 上得到通知,它就是这样工作的。但是当我弹回前一个视图控制器并推送到当前视图并重复锁定和解锁的过程时,这个观察者会触发两次。作为我弹出视图并再次推送到当前视图的次数。通知程序触发我推送到的次数View.我知道这是因为 init 方法。每当加载视图时,它都会添加一个观察者,但不会删除观察者。

除此之外我还能做什么。

4

2 回答 2

0

尝试将其添加到 -awakeFromNib 另外,尝试以不同的方式删除通知。我没有代码,但你还必须给它通知的名称,你应该只删除 dealloc 中的观察者

于 2013-06-17T12:38:05.297 回答
0

您必须在 viewWillDisappear 方法中删除观察者。

-(void)viewWillDisappear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

并从 initWithNibName 中删除。

于 2013-06-17T12:39:17.433 回答