0

我有奇怪的问题。在ViewController.m,我在成功保存后发布通知并执行 Segue 到ListViewController. 在ListViewController.m中,我设置了观察者viewDidLoad并声明了处理方法。

问题是调用了处理程序方法但没有执行内部代码!知道为什么吗?

// ViewController.m
if (success) {
    [[NSNotificationCenter defaultCenter] postNotificationName:kAHPlistSavedSuccessfully object:self];
    [self performSegueWithIdentifier:kAHDetailToListSegue sender:self];
}

// ListViewController.m
- (void)viewDidLoad
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(plistSavedSuccessfully:) name:kAHPlistSavedSuccessfully object:nil];
}

- (void)plistSavedSuccessfully:(NSNotification *)notification
{
    NSLog(@"notification %@", notification);
    [self someMethod]; // not called !
}
4

1 回答 1

1

我可以发现一些可能有问题的地方。

首先,您在执行 segue 到列表视图控制器之前发布通知,因此有可能在列表视图控制器将自身添加为通知的观察者之前发布通知。(不太可能是因为正在打印日志语句,但在某些情况下仍然可能)。

第二件事是在与发布它们的队列相同的队列中接收通知。是否有可能在与主队列不同的队列上调用您的发布通知代码?someMethod如果对非线程安全的代码进行任何工作,这可能会导致问题。您应该验证在哪个队列上调用您的发布通知代码,并确保在主队列上调用它,或者在您的处理程序中,someMethod使用dispatch_async.

于 2013-02-13T23:50:08.047 回答