将NSArray从UIViewController传递到子视图

时间:2014-10-12 18:52:29

标签: ios cocoa-touch uiview uiviewcontroller iboutlet

我无法完成将NSArray从父UIViewController传递到子视图UIView的简单任务。

这是一些代码......

我声明了我的子视图(UIView的子类)。然后在故事板初始化时在视图控制器中,将我的数组传递给我的子视图。我记录了数组,控制台告诉我(null)

ParentViewController.h

@property (nonatomic, strong) IBOutlet APColumnTableView *tableView;

ParentViewController.m

-(id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self)
    {
        NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];
        [_tableView setColumnTitles:array];
        NSLog(@"%@", _tableView.columnTitles);
    }
    return self;
}

我在故事板UIView中添加了UIViewController,设置了子类并连接了IBOutlet。我已经宣布了columnTitles NSArray

APColumnTableView.h(我的子视图子类)

@property (nonatomic, strong) NSArray *columnTitles;

然后在.m文件中,我再次记录数组以查看控制台吐出的内容,仍为(null)

APColumnTableView.m

-(void)awakeFromNib
{
    //Intialisation here...
    NSLog(@"%@", self.columnTitles);
}

我哪里错了?!我只想简单地将NSArray从我的UIViewController传递到其子视图。

3 个答案:

答案 0 :(得分:2)

您的所有商店都不会在initWithCoder:中设置。使用awakeFromNibviewDidLoad传递数组。如果您在_tableView中记录initWithCoder:,则可能是nil

答案 1 :(得分:0)

当为ParentViewController调用initWithCoder时,无法保证_tableView已存在。换句话说,只有在awakeFromNib中才能确保所有视图都存在并被占用。

因此,将您的代码从initWithCoder移动到ParentViewController中的awakeFromNib,一切都应该没问题。

答案 2 :(得分:0)

我记得在initWithCoder中你的视图还没有创建(所以_tableView是nil)。尝试在viewDidLoad中执行此操作。