У меня был другой опыт, но перемещение кода в viewDidAppear:
также помогло моему делу.У меня есть IOS-код, который переходит с одной раскадровки на другую, и после завершения перехода - в viewDidLoad:
я инициализировал периодический таймер.Код для таймера ниже [я звонил startTimer в viewDidLoad:
]:
// Schedules a new timer, adds it to the current run loop and waits forever.
- (void) startTimer
{
_timer = [NSTimer scheduledTimerWithTimeInterval: 10.0
target:self
selector:@selector(request)
userInfo:nil
repeats:YES];
// [[NSRunLoop mainRunLoop] addTimer:_timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSDefaultRunLoopMode];
// [[NSRunLoop mainRunLoop] runUntilDate:[NSDate distantFuture]];
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantFuture]];
}
Интересно то, что когда я вызываю startTimer в viewDidLoad: я никогда не могу наблюдать вид напереход iPhone на следующий контроллер - я вижу оператор NSLog, который показывает, что элемент управления пришел к
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
, но элемент управления не переходит к ViewController.
Это поведение не зависит отвремя периодического таймера - установка низкого или высокого значения не влияет на проблему.Наблюдаемая проблема исчезает, когда я перемещаю вызов startTimer на viewDidAppear:
Это сопровождается другим набором вызовов, даже когда я перемещаю код таймера на viewDidAppear:
.Этот код наличия обычного таймера - я создал его, чтобы получить значение RSSI для Bluetooth-соединения с низким энергопотреблением.Что я заметил, так это то, что я перестал получать обратные вызовы делегатов для делегата Bluetooth.