将 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:
中尚未设置您的任何网点。使用awakeFromNib
或viewDidLoad
传递数组。如果你在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