NSNotification не отправлено / получено - PullRequest
1 голос
/ 08 декабря 2011

Я пытаюсь понять это целый день, и я начинаю впадать в отчаяние ... Итак, вот моя проблема:

У меня есть контроллер табличного представления, показывающий список файлов. Пользователь может загрузить новые файлы в этот список. Я занимаюсь загрузкой асинхронно в отдельном классе. Когда новый файл был загружен, я хочу уведомить контроллер табличного представления, чтобы он мог обновить список. Шаблон делегата здесь не совсем подходит, потому что нужно уведомить несколько экземпляров, поэтому я хочу использовать NSNotificationCenter.

В viewDidAppear контроллера вида: метод, который я регистрирую как наблюдатель:

[[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(downloadComplete:) 
    name:kDownloadCompleteNotification 
    object:nil];

Это определенно вызывается перед публикацией уведомления, потому что пользователь должен нажать кнопку добавления на контроллере представления, чтобы начать новую загрузку. По завершении загрузки я отправляю уведомление (в классе DownloadManager):

[[NSNotificationCenter defaultCenter] 
     postNotificationName:kDownloadCompleteNotification 
     object:self];

Однако мой метод обработчика уведомлений в контроллере представления никогда не вызывается. Я добавил точки останова, и это просто не называется. Я также пытался установить объект на ноль. Без разницы.

- (void)downloadComplete:(NSNotification *)notification {
     NSLog(@"Inserting new files into table view.");
}

Как регистрация, так и публикация уведомления осуществляются в главном потоке (я не думаю, что это все равно имеет значение). Контроллер вида не отпущен или еще что-нибудь. Насколько я могу судить, я не делал опечаток. Строки имени являются одной и той же константой.

Если при регистрации в качестве наблюдателя установить для аргумента name значение nil, я получаю все виды (системных) уведомлений, но не мои собственные. Однако, если я отправляю тестовое уведомление сразу после регистрации (в viewDidAppear), оно работает.

Я не знаю, что еще я должен проверить ... Любая подсказка очень ценится. Спасибо!

...