2014-01-08 5 views
2

Что мне здесь не хватает? Я просто пытаюсь отправить простое уведомление с модального контроллера представления обратно на контроллер представления, который запустил его, но ничего не получено.NSNotification Не получен от Modal ViewController

Это код в контроллере представления, который запускает модальное SEGUE:

- (IBAction) chooseSuperGroup:(UIButton *)sender { 
    NSLog(@"super group choice about to be made"); 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(choiceReceived:) 
               name:@"selectionMade" 
               object:self]; 
} 

- (void) choiceReceived: (NSNotification *) notification 
{ 
    NSLog(@"here"); 
    if ([[notification name] isEqualToString:@"selectionMade"]) { 
     NSLog(@"received"); 
     NSLog(@"%@", (NSString *)[notification userInfo]); 
    } 

    [[NSNotificationCenter defaultCenter] removeObserver:self 
                name: @"selectionMade" 
                object:self]; 
} 

Затем, в течение в контроллере представления модально, этот код выполняется, когда пользователь выбирает ячейку из представления таблицы:

NSDictionary *dict = [NSDictionary dictionaryWithObject:selection forKey:@"superGroup"]; 

NSLog(@"printing dictionary contents"); 
for (id key in dict) { 
    NSLog(@"key: %@ object: %@", key, [dict objectForKey:key]); 
} 

[[NSNotificationCenter defaultCenter] postNotificationName:@"selectionMade" object:self userInfo:dict]; 

Мой результат выглядит следующим образом:

Super group choice about to be made 
printing dictionary contents 
key: superGroup object: myChoice 

Так что выбор захватывается и добавлен в словарь. Но нет никаких доказательств получения какого-либо уведомления. Это не может быть так сложно, но я не вижу своей ошибки. Кто-нибудь может мне помочь? Благодаря!

ответ

4

Попробуйте использовать 'ноль' вместо 'я'

// Добавить Observer

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

// Удалить наблюдатель

[[NSNotificationCenter defaultCenter] removeObserver:self 
                name: @"selectionMade" 
                object:nil]; 

// Сообщение Уведомление

[[NSNotificationCenter defaultCenter] postNotificationName:@"selectionMade" object:nil userInfo:dict]; 

: https://stackoverflow.com/a/8188759/2449268

+0

Это было. Я попробовал «ноль» на стороне наблюдателя, но не на стороне уведомителя. Благодаря! – Alex

+0

Кроме того, пока вы регистрируетесь для уведомления с помощью 'object: nil' (что означает: я принимаю уведомление от любого объекта), обычно * отправляет * уведомление с помощью' object: self', который просто передает объект вдоль для слушателей, если они хотят допросить отправителя. Это 'nil' на конце регистра, что имеет значение с точки зрения получения уведомления. – Olie

Смежные вопросы