2017-01-28 1 views
1

В настоящее время я сталкиваюсь с проблемой, в которой, если я выбираю строку в виде таблицы и возвращаюсь назад и нажимаю кнопку «+» на навигационной панели, мое приложение выйдет из строя. Я подозреваю, что это может быть потому, что я выбрал опцию «show modally» в xcode. В любом случае, я могу быть полностью выключен, но вот мой код. Пожалуйста, медведь со мной, как я только взял кодированияПанель навигации «Отмена»

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    NSIndexPath *path = [self.tableView indexPathForSelectedRow]; 
    displayViewController *vc; 

    vc = [segue destinationViewController]; 
    if (path != NULL) { 
     vc.pID = path.row; 
    } 
} 

Это моя функция prepareForSegue и ошибка происходит, когда я пытаюсь установить vc.pID в path.row, потому что, если я нажму на кнопку «+» , он не имеет строки. Есть ли способ не входить в функцию prepareForSegue, если я нажимаю кнопку «+»?

Благодарим за помощь!

+0

Если у вас нет выбранной строки, путь должен быть равен нулю. Как назначить vc.pID? – jesse

ответ

1

Форма подготовки к Segue в Objective-C является ...

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"someIdentifierA"]) { 
     // get the table view selection, for example 
     NSIndexPath *path = [self.tableView indexPathForSelectedRow]; 
     // get some part of my datasource (model), for example 
     MyModelObject *modelObject = self.datasourceArray[indexPath.row]; 
     // initialize part of the model on the destination vc 
     MyOtherViewController *destination = (MyOtherViewController *)segue.destinationViewController; 
     destination.modelObject = modelObject; 
    } else if ([segue.identifier isEqualToString:@"someIdentifierB"]) { 
     // same idea here, but different segue to different destination 
     NSIndexPath *path = [self.tableView indexPathForSelectedRow]; 
     displayViewController *vc = (displayViewController *)[segue destinationViewController]; 
     vc.pID = path.row; 
    } else if // and so on 
    } 
} 
+0

спасибо, что решил мою проблему! – Tim

1

Что вы хотите сделать, это добавить тест для идентификатора segue в prepareForSegue.

Свойство segue имеет значение идентификатора.

if segue.identifier == "nameOfSegueIdentifier" { // do stuff here } 

Таким образом, вы можете запускать определенный код в зависимости от того, какой аспект вашего пользовательского интерфейса запускает сеанс.

редактировать

К сожалению, видел только теперь, когда вы используете Objective C. Мой код на Swift. Не знаете, как реализовать его в объективе C, но концепция будет такой же.