我有一个包含一些静态行的静态单元 UITableViewController。控制器本身包含 3 个部分。我打算每次用户通过模态segue添加来自其他控制器的新对象时添加一行。我使用情节提要实现了所有这些,并将其连接到我制作的自定义 UITableViewController。
首先,我在情节提要上有一个 tableView 控制器。然后我创建了一个 UITableViewController 的自定义类,它覆盖了以下这些方法
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 3;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
if (section == 2) {
return [appDelegate.userIds count];
} else {
return [super tableView:tableView numberOfRowsInSection:section];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 2) {
UITableViewCell *cell;
cell = [tableView dequeueReusableCellWithIdentifier:@"userIdCell"];
if (!cell)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"userIdCell"];
}
appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
NSLog([NSString stringWithFormat:@"%d", [appDelegate.userIds count]]);
NSLog([[appDelegate.userIds objectAtIndex:indexPath.row] userId]);
cell.textLabel.text = [[appDelegate.userIds objectAtIndex:indexPath.row] userId];
return cell;
} else if (indexPath.section == 1) {
UITableViewCell *cell;
cell = [tableView dequeueReusableCellWithIdentifier:@"addCell"];
if (!cell)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"addCell"];
}
if (indexPath.row == 0) {
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.textLabel.text = @"Add User ID";
}
return cell;
} else {
return [super tableView:tableView cellForRowAtIndexPath:indexPath];
}
}
请注意,appDelegate.userIds 是我从 AppDelegate 类实例化的可变数组,而 appDelegate 是它的一个实例。
通过模态 segue 到其他输入表单 viewController,我将一个用户对象添加到 appDelegate.userIds 数组。
这是segue准备
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"tambahUser"])
{
UINavigationController *navigationController = segue.destinationViewController;
TambahUserViewController *TambahUserViewController = [[navigationController viewControllers] objectAtIndex:0];
TambahUserViewController.delegate = self;
}
}
这是我从 ControllerDelegate 实现的方法
#pragma mark - tambahUserViewControllerDelegate
- (void)tambahUserViewController:(TambahUserViewController *)controller didAddUser:(User *)user
{
[appDelegate.userIds addObject:user];
NSInteger lastRowIndex = [appDelegate.userIds count] - 1;
NSIndexPath* indexPath = [NSIndexPath indexPathForRow:lastRowIndex inSection:2];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[self dismissViewControllerAnimated:YES completion:nil];
}
- (void)tambahUserViewControllerDidCancel:(TambahUserViewController *)controller
{
[self dismissViewControllerAnimated:YES completion:nil];
}
最初第 3 部分(第 2 部分)没有行,所以我在其中添加了第一行。添加第一个用户后没有问题。添加第二行后出现错误。它说,
> 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
你能告诉我我的代码有什么问题吗?谢谢你。