在将对象传递给它之前需要一个viewcontroller存在

时间:2014-02-28 03:44:46

标签: ios uiviewcontroller

我首先为问题标题道歉,这可能没有多大意义或者非常明显。我有tabbarcontroller,其上有两个观点(view1view2)。它以view1作为初始视图开始。我需要将view1传递给view2,我已经想到这要归功于这个令人敬畏的社区=]。然而,当我运行模拟器时,当我开始view1时,如果我然后传递对象,那么没有任何反应,但如果我先去“看”view2然后再回到{{1} ,对象被完美地接收。我认为这是一个view1的{​​{1}}的问题,直到我实际要求查看它,因为它在viewDidLoad中初始化。任何帮助表示赞赏。感谢。

这是我在view2中的viewDidLoad:

view2

这是view1中按钮的方法,它将对象提供给view2:

array2

我“认为问题是我应该在[super viewDidLoad]; // Do any additional setup after loading the view. self.tableView.delegate = self; self.tableView.dataSource = self; [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; self.array2 =[[NSMutableArray alloc]init]; 之前初始化 object = [self.array1 objectAtIndex:15]; UINavigationController *navi = (UINavigationController *)[[self.tabBarController viewControllers] objectAtIndex:1]; SecondViewController *secViewController = [[navi viewControllers] objectAtIndex:0]; [secViewController.array2 addObject:object]; [secViewController.tableView reloadData]; 并且我猜这将在viewController的init中。我不知道如何做到这一点,我的VC2 .m没有init方法,我不确定在进入此屏幕之前如何使其初始化array2

2 个答案:

答案 0 :(得分:1)

使用initWithCoder:因为您的控制器是在IB中制作的。将此代码放在vc2 .m文件中。

-(id)initWithCoder:(NSCoder *) aDecoder {
   if (self = [super initWithCoder: aDecoder]) {
        _array2 =[[NSMutableArray alloc]init];
   }
   return self;
}

答案 1 :(得分:0)

在选项卡视图控制器中,仅在该视图可见时查看加载。因此,当您的应用程序午餐时,它首次加载第一个视图。第二个视图不会加载。所以你的第二个视图控制器的-viewDidLoad不会被调用。因此,您的阵列目前尚未启动。

所以你需要在init方法中分配数组。

 -(id)init
{
   self = [super init];
   if(self) 
   {
        _array2 =[[NSMutableArray alloc]init];
   }
   return self;
}

我认为如果不在其他init方法中写这一行,它会起作用。