большая проблема с NSNotificationCenter, он не обновляет отображение цели - PullRequest
2 голосов
/ 26 марта 2011

Помогите, я в отчаянии ... я не могу продолжить свое приложение из-за этого:

Я настроил одно сообщение между двумя из моих предложений какао target-c, основным приложением приложения является обмен сообщениями представлениячерез NSNotificationCenter представление действительно получает уведомление, но каким-то образом оно не может обновить элементы управления, видимые в представлении ... похоже, что оно не может найти подходящий экземпляр или что-то в этом роде.

вот мой код: mainapp (гдеappdelegate messages мой взгляд):

helloKey = @"0";
helloString = @"mymessage";

values = [NSMutableDictionary dictionaryWithObject:helloString forKey:helloKey];
[[NSNotificationCenter defaultCenter] postNotificationName:@"NewMessageNotification" object:self userInfo:values];

функция определена в myuiviewcontoler

- (void)NewMessageNotification:(NSNotification *)notification
{

    // key associated with string "Hello String"
    helloKey = @"0";

    // [notificaiton userInfo] returns "values"
    helloFromMain = [[notification userInfo] objectForKey:helloKey]; 
    NSLog(@"newmess=%@",helloFromMain; //this outputs mymessage , perfect right?? not quite..here's the problem
        //then if I'm trying to update something visible ..it won't do IT!!!! :( :(
     //tested with the debugger and it reaches this line...when the messaging occurs
    [self.mybutton setTitle:@"sdsdsdasd" forState:UIControlStateNormal];
        //this won't work, not it will give an error!!! 
}

Так в чем может быть проблема?ничто из видимого не может быть изменено программно при использовании этого, и я нуждаюсь в этом ..

Если я делаю IBAction и назначаю его кнопке этого представления и делаю то же самое: [self.mybutton setTitle: @ "sdsdsdasd" forState: UIControlStateNormal];он обновит мой дисплей без проблем ... изменяя заголовок ...

Так в чем же разница между функцией, вызываемой NSnotificationcenter, и функцией, которая принадлежит тому же представлению ...

Я пытался увидеть адрес переменной self в обоих случаях, он получается одинаковым ... так что ... в основном использует один и тот же указатель, верно?

все же он не работает...

Я отправил еще один пост несколько дней назад ... но никто не ответил Программно созданные ярлыки и изображения не отображаются на экране

Ответы [ 2 ]

3 голосов
/ 26 марта 2011

Очень похоже на то, что ваш NewMessageNotification: метод не вызывается в главном потоке; Обновления пользовательского интерфейса должны выполняться только из основного потока, иначе все будет работать некорректно.

Обычная идиома для подобной ситуации выглядит примерно так:

- (void)NewMessageNotification:(NSNotification *)notification
{
    if (![NSThread isMainThread]) {
        [self performSelectorOnMainThread:@selector(NewMessageNotification:) withObject:notification waitUntilDone:NO];
        return;
    }

    // Existing code goes here
}
0 голосов
/ 26 марта 2011

Похоже, у вас, вероятно, есть два разных экземпляра вашего класса, один из которых подключен ко всем материалам в кончике, а другой - для регистрации уведомления. Попробуйте зарегистрировать self в этом методе, и вы, вероятно, увидите разные адреса объектов, когда он вызывается уведомлением, а не кнопкой.

...