从一个viewController传递数据到另一个viewController时获取NSException

时间:2016-10-20 09:46:12

标签: ios objective-c uiviewcontroller storyboard

我将数据从一个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。任何帮助都将受到赞赏。

3 个答案:

答案 0 :(得分:0)

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 :(得分:0)

使用此功能您正在使用 storyboard

像这样传递你的价值

 [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 :(得分:0)

原因

这种情况正在发生,因为您正在实例化并设置属性DashboardViewController的{​​{1}}与执行segue的empid不同。您使用以下代码实例化它

DashboardViewController instance

DashBoardViewController *dash = [[DashBoardViewController alloc]initWithNibName:@"DashBoardViewController" bundle:nil]; dash.empid = empid1; 正在使用DashBoardViewController正在使用的iOS创建prepareForSegue,与您创建的dash不同。出于调试目的,在empid属性中添加一些默认值,然后调用performSegueWithIdentifier。它将调用prepareForSegue方法。 ViewController 将发生segue作为{ {1}}作为此方法中的参数,其类型为destinationViewController。覆盖此方法.Downcast UIViewControllerdestinationViewController。记录DashBoardViewController属性。它将具有默认值。现在empid的{​​{1}}属性。它将具有正确的值。所以你的实例在这里没用。

解决方案

根据 @balkaran singh 的回答,在empid设置dash属性,或者如果您想使用empid变量,则嵌入prepareForSegue并按照 @HImanshu Moradia 在之前的答案中的建议调用dash,然后推送navigationController