1

我有一个包含一些静态行的静态单元 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]'

你能告诉我我的代码有什么问题吗?谢谢你。

4

0 回答 0