получение NSException при передаче данных из одного ViewController в другой ViewController

#ios #objective-c #uiviewcontroller #storyboard

#iOS #objective-c #uiviewcontroller #раскадровка

Вопрос:

Я передаю данные из одного ViewController в другой ViewController. Но это выбрасывает NSException .

Вот мой код.

viewcontroller.m

  NSString *empid1 = [dataDict objectForKey:@"EmployeeId"];
 NSLog(@"empid %@",empid1); //it prints 161.
 DashBoardViewController *dash = [[DashBoardViewController    alloc]initWithNibName:@"DashBoardViewController" bundle:nil];
 dash.empid = empid1;
  

DashBoardViewController.h

  @property (strong, nonatomic) NSString * empid;
  

DashBoardViewController.m

 NSString *strURL=[NSString stringWithFormat:@"http://192.168.1.1:8002/api/Case/GetCaseByEmployeeID/?empId=%@",_empid];
  

Он выдает данные nil.NSException .Любая помощь будет оценена.

Комментарии:

1. Лучше, если вы опубликуете полный журнал исключений.

2. вы нажимаете VC, верно???

3. вы используете только xib или раскадровку?

4. Где именно вы пытаетесь использовать _empid? Похоже, вы пытаетесь использовать _empid до того, как он был установлен.

5. Я использую раскадровку…

Ответ №1:

пожалуйста, используйте это, вы используете раскадровку

передайте свое значение следующим образом

  [self performSegueWithIdentifier:@"DashBoardViewController" sender:[dataDict objectForKey:@"EmployeeId"]];
  

используйте этот метод при использовании performSegueWithIdentifier

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
    if ([segue.identifier isEqualToString:@"DashBoardViewController"])
    {
        DashBoardViewController *dash= segue.destinationViewController;
      dash.empid =(NSString *)sender;

    }
}
  

Ответ №2:

 YOURCONTROLLER *chatdetail=[[YOURCONTROLLER alloc] initWithNibName:@"YOURCONTROLLER_IDENTIFIER" bundle:nil];
chatdetail.strTitle = "YOUR VALUE"
[self.navigationController pushViewController:chatdetail animated:YES];
  

Следующий контроллер

 @property (weak, nonatomic) NSString *strTitle;
- (void)viewDidLoad {
     [super viewDidLoad];
      NSLog(@"%@",self.strTitle);
} 
  

Комментарии:

1. Я использую objective — c

2. @MuthuRaj попробуйте сейчас

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

Ответ №3:

Причина

Это происходит потому, что, DashboardViewController что вы создаете экземпляр и устанавливаете свойство empid отличается от DashboardViewController instance , на котором выполняется segue. Вы создаете его экземпляр с помощью следующего кода

  DashBoardViewController *dash = [[DashBoardViewController    alloc]initWithNibName:@"DashBoardViewController" bundle:nil];
 dash.empid = empid1;   
  

Но DashBoardViewController который используется iOS , создается в prepareForSegue методе и отличается от dash созданного вами. Для целей отладки введите некоторое значение по умолчанию в empid свойство, а затем вызовите performSegueWithIdentifier .Он вызывает prepareForSegue метод.ViewController, на котором произойдет переход, будет передан как destinationViewController параметр в этом методе, который будет иметь тип UIViewController .Переопределите этот метод.Сбросить destinationViewController как DashBoardViewController .Свойство Log empid .Оно будет иметь значение по умолчанию.Теперь зарегистрируйте empid свойство dash .Оно будет иметь правильное значение.Таким образом, ваш экземпляр здесь бесполезен.

Решение

Установите empid свойство в prepareForSegue , как ответил @balkaran singh, или, если вы хотите использовать свою dash переменную, вставьте navigationController и нажмите dash на нее без вызова, performSegueWithIdentifier как предложил @HImanshu Moradia в предыдущих ответах.