2016-03-19 3 views
0

Я подпрыгиваю в довольно странной проблеме. Когда я выталкиваю определенный контроллер вида для другого, первый увольняется вскоре после его показа. Когда я нажимаю его на главный контроллер просмотра, он остается без проблем. Я поставил точки останова, и viewDidDisappear фактически вызван сразу после viewDidAppear. По запаху это похоже на то, что второй контроллер просмотра становится нулевым, но как это возможно, если он подключен к раскадровке? У кого-нибудь есть представление о том, что может быть причиной странного поведения? Главный контроллер вида и первый контроллер представления находятся в Swift, толкаемый контроллер все еще находится в Objective-c. Это, как я открыть второй контроллер представления:ViewController выскочил сразу же после нажатия в UINavigationController

func didSelectRow(indexPath: NSIndexPath, from owner: DestinationsViewController){ 
    if let currentElement=DestinationsContentProvider.sharedContentProvider().stations[indexPath.row]{ 
     print("a \(indexPath.row) elemento \(currentElement)") 
     let targetModel = currentElement.model 
//NSLog(@"targetMetro:%@ targetPaletta=%@", owner.targetMetro, owner.targetPaletta); 
     if ((targetModel != nil) && (targetModel!.myTraffic != nil)){ 
      targetModel!.segueExecute() 
    } 
} 

segueExecute называется на модели, которая не распущенная. Я поставил точку останова на dealloc, и он никогда не был достигнут.

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

mapController.performSegueWithIdentifier("ShowWaiting", sender:self) 

Тем не менее такое же поведение происходит, даже если я вручную толкать с помощью:

let mainStoryboard:UIStoryboard! 
if (UIDevice.currentDevice().userInterfaceIdiom == .Pad){ 
    mainStoryboard=UIStoryboard(name:"StoryboardiPad", bundle: nil) 
} else { 
    mainStoryboard=UIStoryboard(name:"MainStoryboard_iPhone", bundle: nil) 
} 
let controller = mainStoryboard.instantiateViewControllerWithIdentifier("Situation") as! StationSituation 
controller.model=targetModel; 
InArrivoHDViewController.sharedDetailController().navigationController?.pushViewController(controller, animated: true) 

не используя конструкцию segue.

ответ

0

Я исправил проблему, просто вызвав функцию performSegue на контроллере представления, а не делегируя ее корневому контроллеру. По какой-то причине эта делегация работает, если в очереди навигации есть тот же контроллер вида, в который вы нажимаете контроллер: у меня есть эта конструкция в другом классе, и я просто проверил ее на самом деле. В противном случае эффект будет странным, который я испытал.

Я думаю, но я не уверен, что в Objective-c ситуация была другой.

0

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

+0

Не совсем, я добавил фрагмент кода, запускающий segue. –

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