Iphone 将变量发送到另一个viewcontroller

Iphone 将变量发送到另一个viewcontroller,iphone,ios,Iphone,Ios,我有两个视图控制器。一个包含一个tableview。在didselectrowforindexpath方法中,我想将一个对象发送到另一个viewcontroller,但当该对象被传递到目标视图控制器时,该对象为null im发送的对象是属于TableServiceNews类的服务ID。目标viewcontroller继承TableServiceNews 这是didselectrow的代码:- -(void)tableView:(UITableView *)tableView didSelectR

我有两个视图控制器。一个包含一个tableview。在didselectrowforindexpath方法中,我想将一个对象发送到另一个viewcontroller,但当该对象被传递到目标视图控制器时,该对象为null

im发送的对象是属于TableServiceNews类的服务ID。目标viewcontroller继承TableServiceNews

这是didselectrow的代码:-

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    TableServiceNews *serviceTable = [[TableServiceNews alloc]init];
    serviceTable.service_ID = [ServiceID objectAtIndex:indexPath.row];
    serviceTable = [self.storyboard     instantiateViewControllerWithIdentifier:@"navigationServiceNews"];
    [self.slidingViewController anchorTopViewOffScreenTo:ECRight
        animations:nil onComplete:^{
        CGRect frame = self.slidingViewController.topViewController.view.frame;
        self.slidingViewController.topViewController = serviceTable;
        self.slidingViewController.topViewController.view.frame = frame;
        [self.slidingViewController resetTopView];
    }];
}

slidingviewcontroller方法使用的是我从github获得的一个类,即链接。

请确保在实现(@synthesis)中定义了服务ID,如果它不起作用,请确保在推送新的viewcontroller以首先加载它之后为其分配值。 我希望这是有帮助的

替换:

TableServiceNews *serviceTable = [[TableServiceNews alloc]init];
serviceTable.service_ID = [ServiceID objectAtIndex:indexPath.row];
serviceTable = [self.storyboard instantiateViewControllerWithIdentifier:@"navigationServiceNews"];
与:

UIViewController *serviceTable = [self.storyboard instantiateViewControllerWithIdentifier:@"navigationServiceNews"];
((TableServiceNews*)serviceTable).service_ID = [ServiceID objectAtIndex:indexPath.row];
问题可能是在从情节提要实例化serviceTable之前分配service_ID值


顺便说一下,实例化ViewControllerWithiIdentifier将返回UIViewController。因此,您需要强制转换它,以便像您创建的子类一样使用它。

尝试打印此值NSLog(@“val is%@,[ServiceID objectAtIndex:indexPath.row]);是的。它返回的值很好,但当我将其记录到目标视图中时,它为null。只需在Appdelegate中获取一个变量并将其设置为DidSelectRowatinex,然后从serviceTable viewdidload中的Appdelegate访问同一个变量method@ernaidu如何访问另一个viewcontroller中appdelegate中定义的变量?声明@property(非原子,保留)NSString*ar;在.h和.m中合成它。然后您可以像Appdelegate*del=[[UIApplication sharedapplicatin]delegate]那样访问它;NSString*var=del.propertyVariable;当我在viewcontroller推送后分配值时,应用程序崩溃,并出现以下错误:“NSInvalidArgumentException”,原因:“-[UINavigationController设置服务\u ID:]:发送到实例的未识别选择器我认为推送的控制器错误”,-[UINavigationController设置服务\u ID:]意味着serviceID属于导航控制器而不是viewcontroller,请查看您的代码它是否工作!我更改了标识符,它成功了。但问题是viewcontroller与navigationcontroller捆绑在一起,我需要它在视图顶部显示navigationbar。当我将标识符更改为viewcontroller时,它工作得很好,但它不显示导航栏。不,不太好!viewcontroller顶部的导航栏现在不见了!Rashid,你必须正确地重新组织你的应用程序,你不必删除导航栏,只需从viewcontroller而不是navigationbarI调用函数,我得到了这个错误:“NSInvalidArgumentException”,原因:“-[UINavigationController setService_ID::未识别的选择器发送到instanceOk谢谢。我想试试,但还有一件事。我应该在何处分配和初始化服务\u ID?
实例化eviewcontrollerwhiteIdentifier:
实例化并返回具有指定标识符的视图控制器。