Ios 在将对象传递给viewcontroller之前需要viewcontroller存在

Ios 在将对象传递给viewcontroller之前需要viewcontroller存在,ios,uiviewcontroller,Ios,Uiviewcontroller,首先,我为这个问题的标题道歉,这个标题可能没有多大意义,或者非常明显。我有一个tabbarcontroller,上面有两个视图(view1和view2)。它从view1开始作为初始视图。我需要将一些东西从view1传递到view2,这要感谢这个很棒的社区=]。然而,当我运行模拟器时,当我在view1上启动时,如果我当时在那里传递对象,则不会发生任何事情,但如果我先去“查看”view2,然后返回到view1,则对象会被完美接收。我认为这是一个view2的array2问题,因为它在viewDidLo

首先,我为这个问题的标题道歉,这个标题可能没有多大意义,或者非常明显。我有一个
tabbarcontroller
,上面有两个视图(
view1
view2
)。它从
view1
开始作为初始视图。我需要将一些东西从
view1
传递到
view2
,这要感谢这个很棒的社区=]。然而,当我运行模拟器时,当我在
view1
上启动时,如果我当时在那里传递对象,则不会发生任何事情,但如果我先去“查看”
view2
,然后返回到
view1
,则对象会被完美接收。我认为这是一个
view2
array2
问题,因为它在viewDidLoad中初始化,所以在我实际请求查看它之前,它一开始并不存在。感谢您的帮助。谢谢

这是我在view2中的viewDidLoad:

[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];
这是在view1中按下按钮的方法,将对象提供给view2:

            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];

我“我想问题是我应该在
viewDidLoad
之前初始化
array2
,我猜这应该在viewController的init中。我不知道怎么做,我的VC2.m没有init方法,我不知道如何在进入此屏幕之前使它初始化
array2

在选项卡视图控制器中,仅当视图可见时才查看加载。因此,第一次当你的应用程序午餐时,它只加载第一个视图。无法加载第二个视图。因此不会调用第二个视图控制器的-viewDidLoad。因此,此时不会启动阵列

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

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

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

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

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

如果您发布您正在使用的代码以提供一些解决方案,这将有所帮助。^已更新,如果您需要其他代码,请告诉我。谢谢你说“什么都没发生”是什么意思?是什么使您认为此对象未传递给视图控制器?你期望发生什么?你看到了什么?也许最重要的是,你如何测试你的假设?我在vc2的array2中放置了一个初始对象:dummy。事件顺序为:运行模拟器vc1(这是初始屏幕),将对象发送到阵列2,vc2。我看到的只是我初始化vc2时使用的假人。当事件顺序为:运行模拟器、vc1、vc2(我在这里看到虚拟对象)、vc1、将对象发送到阵列2、vc2(我现在看到虚拟对象和新对象)时,您对问题的分析是正确的。那么,你到底不知道怎么做?写一个init方法?使用哪种init方法取决于控制器的创建方式。如果你在故事板中做了这个,那么你应该使用initWithCoder,如果在xib文件中,使用initWithNibName:bundle:,如果在代码中,就使用init。当我在vc2中写这篇文章时,vc2中不再显示tableview。它只是带有导航栏和选项卡栏的视图。我假设你的方法是正确的,但是为什么vc2中的tableView只有在我初始化viewDidLoad中的array2时才会出现?vc2表视图在vc2中作为属性(强、非原子)IBOutlet列出。