Таймер селектор никогда не выполняется - PullRequest
1 голос
/ 23 декабря 2010

Я добавил наблюдателя для моего метода:

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

Затем мои соответствующие методы:

-(void)closeViewAfterUpdating; {
NSLog(@"Part 1 called");
[self performSelector:@selector(closeViewAfterUpdating2) withObject:nil afterDelay:2.0];
}

-(void)closeViewAfterUpdating2; {
NSLog(@"Part 2 called");
[self dismissModalViewControllerAnimated:YES];
}

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

Проблема в том, что второй метод никогда не вызывается.Мой NSLog вывод показывает Part 1 called, но он никогда не запускает часть 2. Любые идеи?

РЕДАКТИРОВАТЬ: я вызываю уведомление из фонового потока, это имеет значение случайно?

Вот как я создаю свой фоновый поток:

[NSThread detachNewThreadSelector:@selector(getWeather) toTarget:self withObject:nil];

и в getWeather у меня есть:

[[NSNotificationCenter defaultCenter] postNotificationName:@"updateZipLabel" object:textfield.text];

Кроме того, вызывая:

[self performSelector:@selector(closeViewAfterUpdating2) withObject:nil];

работает работает.

EDITx2: я исправил это.Просто нужно было опубликовать уведомление в моей основной теме, и оно работало просто отлично.

Ответы [ 3 ]

1 голос
/ 23 декабря 2010

Фоновый поток является проблемой. У него не работает цикл выполнения, поэтому селектор никогда не вызывается. Просто позвольте объекту NSRunLoop или CFRunLoopRef потока работать, пока селектор не запущен.

0 голосов
/ 23 декабря 2010

У вас есть точка с запятой в определении метода:

-(void)closeViewAfterUpdating2; {

Это присутствует в коде или проблема копирования / вставки?Это было бы проблемой, почему вы никогда не видите, что это называется.

0 голосов
/ 23 декабря 2010

Я попробовал ваш код, и он отлично работает на моей стороне. Возможно, вы делаете что-то необычное в фоновом режиме, которое прерывает ваш селектор.

...