将 NSArray 从 UIViewController 传递到子视图 [重复]

Posted

技术标签:

【中文标题】将 NSArray 从 UIViewController 传递到子视图 [重复]【英文标题】:Passing an NSArray from a UIViewController to a subview [duplicate] 【发布时间】:2014-10-12 18:52:29 【问题描述】:

我在将 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;

我在我的故事板UIViewController 中添加了UIView,设置了子类并连接了它的IBOutlet。如您所见,我已经声明了columnTitles NSArray

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

@property (nonatomic, strong) NSArray *columnTitles;

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

APColumnTableView.m

-(void)awakeFromNib

    //Intialisation here...
    NSLog(@"%@", self.columnTitles);

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

【问题讨论】:

太好了,因为它根本没有帮助。我查了这个没有答案。我不会将数据传回,我不会在几乎所有这些现有答案都涵盖的视图控制器之间切换。你能不看我发布的代码并告诉我我做错了什么吗?如果找不到现有答案,我不会发帖。 【参考方案1】:

initWithCoder: 中尚未设置您的任何网点。使用awakeFromNibviewDidLoad 传递数组。如果你在initWithCoder: 中登录_tableView,它可能会是nil

【讨论】:

亚伦的回答是正确的。 (已投票)。在您的 init 方法中,您的视图控制器视图尚未加载。 viewDidLoad 是放置处理视图的代码的常用位置。 啊!我没有把它放在viewDidLoad 中的原因是,当从那里设置数组时,我的子视图中的awakeFromNib 已经被调用了。那么如何确保可以从父级设置数组,然后在子视图中进行初始化? 在您的表格视图子类中,一种方法是覆盖设置器,然后在设置数据时重新加载表格视图。因此,您根本不必依赖调用方法的顺序。我对awakeFromNib 等不太熟悉,因为我不使用 xib 文件或情节提要,所以也许其他人有更好的答案。 暂时想一想,我已经解决了这个问题,只需向我的子视图添加一个方法,这样我就可以在任何时候从我的父 VC 初始化 UI 和其他元素,例如数组。同样覆盖 setter 似乎是一个可行的计划。谢谢。【参考方案2】:

当为您的 ParentViewController 调用 initWithCoder 时,您不能保证 _tableView 已经存在。换句话说,只有在 awakeFromNib 中,您才能确定您的所有视图都存在并被考虑在内。

因此,将您的代码从 initWithCoder 移动到 ParentViewController 中的 awakeFromNib,一切都会好起来的。

【讨论】:

【参考方案3】:

我记得在 initWithCoder 中您的视图尚未创建(因此 _tableView 为零)。尝试在 viewDidLoad 中执行此操作。

【讨论】:

以上是关于将 NSArray 从 UIViewController 传递到子视图 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将 NSArray 或 NSDitory 从 iOS 发送到 PHP webservice

将 NSArray 从 UIViewController 传递到子视图 [重复]

将项目从 NSArray 传输到 NSManagedObject 的 NSSet

从 NSArray 过滤 NSDictionary

从存储在 NSDictionary 中的 JSON DATA 将应用程序名称存储在 NSArray 中

是否可以从 AppDelegate 获取 NSArray?