遵循以下教程我没有遇到任何问题:http://www.raywenderlich.com/1797/how-to-create-a-simple-iphone-app-tutorial-part-1。本质上,本教程教导人们创建一个简单的表视图,其中填充了来自NSMutableArray的数据,然后深入到每个项目的DetailView中。
然后我尝试通过创建TabViewController并将创建的Table View作为此控制器的“Tab项2”来增强我的功能。
这打破了表的自动填充。
用于从 AppDelegate.m
填充表格的代码 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
Person *person1 = [[Person alloc] initWithName:@"Monica"
balance:420
thumbImage:[UIImage imageNamed:@"01.jpg"]
fullImage:[UIImage imageNamed:@"01_t.jpg"]];
Person *person2 = [[Person alloc] initWithName:@"Ross"
balance:630
thumbImage:[UIImage imageNamed:@"02.jpg"]
fullImage:[UIImage imageNamed:@"02_t.jpg"]];
Person *person3 = [[Person alloc] initWithName:@"Rachel"
balance:420
thumbImage:[UIImage imageNamed:@"03.jpg"]
fullImage:[UIImage imageNamed:@"03_t.jpg"]];
NSMutableArray *persons = [NSMutableArray arrayWithObjects:person1, person2, person3, nil];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *initialViewController = (UIViewController *)[storyboard instantiateViewControllerWithIdentifier:@"RootViewController"];
self.window.rootViewController = initialViewController;
TableViewController * peopleTableViewController = [storyboard instantiateViewControllerWithIdentifier:@"PersonTableViewController"];
[peopleTableViewController setPersons: persons];
// Override point for customization after application launch.
return YES;
}
'persons'是一个Person实例数组,它是TableViewController的一个属性。以下是基于 TableViewController.m 的'persons'数组的表的填充:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"PersonCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//For each person
Person *person = [self.persons objectAtIndex:indexPath.row];
cell.textLabel.text = person.name;
cell.imageView.image = person.thumbImage;
cell.detailTextLabel.text = [person getPrice];
return cell;
}
最后,故事板位于此处:http://i.stack.imgur.com/9axs8.png
只是为了重新迭代,这一切都编译得很好但是在测试期间,在打开选项卡#2(表格视图控制器按照故事板存在)时,表格为空。在添加选项卡之前,这工作正常。
我仍然是Objective C的新手,所以如果您有任何其他信息,请告诉我。
答案 0 :(得分:1)
您的问题是您正在实例化新的视图控制器,而不是使用故事板中已有的视图控制器。当这个应用程序启动时,标签栏控制器及其内容视图控制器都将被实例化。此外,因为其中一个控制器(选项卡2中的控制器)是导航控制器,所以它的根视图控制器TableViewController也将被实例化。所以,你只需要获得对这个表视图控制器的引用,而不是创建一个新的:
UITabBarController *tabVC = (UITabBarController *)self.window.rootViewController;
UINavigationController *nav = tabVC.viewControllers[1];
TableViewController *peopleTableViewController = nav.topViewController;
[peopleTableViewController setPersons:persons];
这应该可行,但我认为最好将Person对象和persons数组的创建移动到表视图控制器的viewDidLoad方法。
答案 1 :(得分:0)
我认为你的问题在这里:
Person *person = [self.persons objectAtIndex:indexPath.row];
尝试将代码放入ViewDidLoad
而不是AppDelegate
并运行它。 (仅用于测试)