0

我的应用程序中有一个可编辑的UITableView添加和删除元素)。它的工作很奇怪。
虽然我只有一两行,但一切都很完美。但如果我添加更多项目,我有一个例外'*** -[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0 .. 2]'

我无法设置断点并处理它。也许,有人可以帮助我吗?

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    int plusRow = 0;
    if ([[self tableView] isEditing]) plusRow = 1;

    return [typeList count] + plusRow;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    if ([indexPath row] > ([typeList count]-1)) {
        NSString * appendCellDescription = @"";

        if ([[self tableView] isEditing]) appendCellDescription = @"Add";

        [[cell textLabel] setText:appendCellDescription];
    } else {
        NSLog(@"Accessing array: %d", [indexPath row]);
        [[cell textLabel] setText:[[typeList getObject:[indexPath row]] description]];
    }

    return cell;
}

#pragma mark - Editing table view

- (UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{

    NSLog(@"Row: %d, count: %d", [indexPath row], [typeList count]);

    if (indexPath.row > [typeList count]-1) {
        return UITableViewCellEditingStyleInsert;
    } else {
        return UITableViewCellEditingStyleDelete;
    }
}

- (IBAction)btnModifyClick:(id)sender{
    if ([[self tableView] isEditing]) {
        [[self tableView] setEditing:FALSE animated:YES];
        [[self tableView] reloadData];
    } else {
        [[self tableView] setEditing:TRUE animated:YES];
        [[self tableView] reloadData];
    }
}
4

3 回答 3

0

我找到了解决问题的方法。我刚刚在情节提要 TableView 的 XCode 属性中将“Sections”更改为 0。现在工作正常。

感谢大家的回复!

于 2013-04-13T16:29:05.690 回答
0

numberOfRowsInSection返回的项目数比cellForRowAtIndexPath数据源方法中获取的项目数多,请尝试调试返回值:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    int plusRow = 0;
    if ([[self tableView] isEditing]) plusRow = 1;
    NSLog(@"%i",[typeList count] + plusRow);
    return [typeList count] + plusRow;
}
于 2013-04-13T11:13:07.413 回答
0

通常,此错误描述,当数组索引中的错误(例如您的数组有 3 项)并且您试图从数组中获取/抽象第 4 项时,此时会生成这种类型的错误。

查找错误的最佳方法是使用 BreakPint。并逐行调试您的项目。并找到您的应用程序。压碎 ??我确信它可以绕过任何阵列。

编辑:

我认为数组名称中的错误使用 BreakPointtypeList的方法检查它。cellForRowAtIndexPath

于 2013-04-13T11:10:27.297 回答