我正在开始iOS编程,我遇到了障碍。我有一个登录视图控制器,使用以下代码将控件(在检查用户身份验证等之后)重定向到选项卡控制器(主屏幕):
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UITabBarController *viewController = (UITabBarController *)[storyboard instantiateViewControllerWithIdentifier:@"homescreen"];
[self presentViewController:viewController animated:YES completion:nil];
主屏幕中的第一个视图控制器是一个导航控制器,通向订阅视图控制器(一个表视图控制器)。从app delegate.m,我正在尝试发送一组值(厨师),表可以使用以下代码填充自己:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UITabBarController *tabBarController = (UITabBarController *)[storyboard instantiateViewControllerWithIdentifier:@"homescreen"];
UINavigationController *navigationController = [tabBarController viewControllers][0];
SubscriptionViewController *controller = [navigationController viewControllers][0];
controller.chefs = _chefs;
但是,该表显示为空。 NSMutable数组“chefs”已被适当填充,并且在故事板中,表格单元格值(UILabels等)已正确连接到内容视图中的对应值。作为检查,我在Subscription视图控制器中NSLog了[self.chefs count]值:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
NSLog(@"%d",[self.chefs count]);
return [self.chefs count];
}
然而,这返回0.我怀疑,我没有正确地播放阵列。
编辑: 我删除了登录视图控制器并使Tab栏控制器成为根视图控制器。然后使用这段代码:
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
UINavigationController *navigationController = [tabBarController viewControllers][0];
SubscriptionViewController *controller = [navigationController viewControllers][0];
controller.chefs = _chefs;
现在我可以看到正确的细胞了。我不确定我将控件从登录视图重定向到标签栏控制器的方式是正确的还是使用我使用storyboard ID来广播数组的方式是正确的。有什么指针吗?
答案 0 :(得分:1)
听起来你的数组没有正确初始化,当你这样分配它时:
controller.chefs = _chefs;
在使用_chefs
做任何事情之前,请确保它已在某处初始化:
_chefs = [[NSArray alloc]init];
答案 1 :(得分:1)
也许_chefs正在发布?尝试像这样分配
controller.chefs = [NSArray arrayWithArray:_chefs];
还要确保在分配后重新加载控制器中的表。也许像控制器一样在控制器中实现setter:
-(void)setChefs:(NSArray*)chefs
{
_chefs = chefs;
[self.tableview reloadData];
}