У меня есть UIViewController *vc1
с 4 кнопками. Каждая кнопка вызывает нажатие на другой UIViewController *vc2
. vc2
показывает некоторую информацию, на основе которой была нажата кнопка. Я передаю информацию от vc1
до vc2
в vc1
's prepareForSegue
(ее просто значение int). Все это прекрасно работает. Теперь мне нужно сделать так, чтобы vc2
также был вызван, если iphone находится на vc1
(vc1
isVisible), а vc1
получает UINotification
(что-то происходит с устройством Bluetooth). Вот мой код:performSegueWithIdentifier и prepareForSegue
-(void) eventDetected:(NSNotification *)notification{
if(self.isViewLoaded && self.view.window){
[self performSegueWithIdentifier:@"detected" sender:self];
}
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
VC2 *destination = [segue destinationViewController];
[destination setValue:value];
}
Прямо сейчас, если надлежащее событие произойдет vc2
нагрузки в два раза, а не один раз. И я получаю эти сообщения об ошибках в выходных журналах:
«Вложенный толчок анимация может привести к повреждению панели навигации» & «несбалансированных вызовам начала/конец внешнего вида переходов для .corrupted &». Заканчивал переход navigaion в непредвиденном состоянии . Дерево навигации в навигационной панели может быть повреждено.
Эти ошибки возникают после нажатия кнопки «Назад». Я добавил NSLog
заявления, поэтому я знаю, что vc2
's viewDidLoad
получает вызов дважды каждый раз.
Я создал нажимные сегменты для всех 4 кнопок, используя раскадровку. Я их не назвал. Я создал событие push segue через раскадровку, а также дал ему идентификатор "detected"
. Я надеюсь, что кто-то здесь имеет некоторое представление о том, что я делаю неправильно. Поблагодарите совет. Благодарю.
Вот текущий код:
-(void)viewDidAppear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(exerciseDetected:) name:@"ExerciseDetected" object:nil];
[[NSNotifcationCenter defaultCenter] addObserver:self selector:@selector(cancelExercise:) [email protected]"cancelExercise" object:nil];
}
-(void)exerciseDetected:(NSNotification *)notification{
if(self.isViewLoaded && self.view.window){
if(self == self.navigationController.topViewController){
if(!timerRunning){
timerRunning =YES;
_exerciseTimer = (NSTimer scheduledTimerWithTimeInterval:EXERCISE_AUTOSTART_TIME target:self selector:@selector(startExercise:) userInfo:nil repeats:NO];
}
}
}
}
-(void)cancelExercise:(id)sender{
[_exerciseTimer invalidate];
timerRunning = NO;
}
-(void) startExercise: (id)sender{
timerRunning = NO;
[self performSegueWithIdentifier:@"detected" sender:self];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
vc2 *destination = [segue destinationViewController];
[destination setSElectedExerciseIDFromMenu:_selectedExercise];
}
Кто-нибудь еще думает, что его вопрос был в реальной жизни, а не у ios specific? –