我首先为问题标题道歉,这可能没有多大意义或者非常明显。我有tabbarcontroller
,其上有两个观点(view1
和view2
)。它以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
。
答案 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方法中写这一行,它会起作用。