#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 в предыдущих ответах.