2

我已经搜索和搜索,我似乎无法找到我的问题的答案。我有一个 3 行的动态表格视图(每行是一个部分)和表格视图右上角的一个编辑按钮。每次用户点击编辑时,都必须可以添加或删除一行。除了 + 按钮被粘贴以添加新行时,一切正常。这是我的代码:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{

return 3;
}


 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{

int count = [myarray count];
if (myarray != nil) count ++;
return count;

}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{     

id cell;
switch(indexPath.section) {
    case 0:
        if(indexPath.row==0) {
            static NSString *cellType1 = @"cellType1";
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellType1];
            return cell;
        }
        break;

    case 1:
        if(indexPath.row==0) {
            static NSString *cellType2= @"cellType2";
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellType2];
            return cell;
        }
        break;

    case 2:
        if(indexPath.row==0) {
            static NSString *cellType3= @"cellType3";
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellType3];
            return cell;
        }
        break;
    default:
        break;
}
return cell;
}



- (IBAction) EditTable:(id)sender
{
if(self.editing)
{
    [super setEditing:NO animated:NO]; 
    [Table setEditing:NO animated:NO];
    [Table reloadData];
    [self.navigationItem.rightBarButtonItem setTitle:@"Edit"];
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStylePlain];
}
else
{
    [super setEditing:YES animated:YES]; 
    [Table setEditing:YES animated:YES];
    [Table reloadData];
    [self.navigationItem.rightBarButtonItem setTitle:@"Ok"];
    [self.navigationItem.rightBarButtonItem setStyle:UIBarButtonItemStyleDone];
}
}

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

if (self.editing == NO || !indexPath) return UITableViewCellEditingStyleNone;

if (self.editing && indexPath.row == ([myarray count])) 
{
    return UITableViewCellEditingStyleInsert;
} else 
{
    return UITableViewCellEditingStyleDelete;
}
return UITableViewCellEditingStyleNone;
}

- (void)tableView:(UITableView *)TableView commitEditingStyle:    (UITableViewCellEditingStyle)editingStyle 
forRowAtIndexPath:(NSIndexPath *)indexPath 
{

if (editingStyle == UITableViewCellEditingStyleDelete) 
{
    [myarray removeObjectAtIndex:indexPath.row];
    [Table reloadData];
} else if (editingStyle == UITableViewCellEditingStyleInsert)
{
    switch(indexPath.section) {
        case 0:

             if(indexPath.row==0) {
                static NSString *cellType1 = @"cellType1";
                UITableViewCell *cell = [TableView dequeueReusableCellWithIdentifier:cellType1];
                [arry insertObject:cell atIndex:[myarray count]];
                [Table reloadData];

            }
            break;

        case 1:
            if(indexPath.row==0) {
                static NSString *cellType2= @"cellType2";
                UITableViewCell *cell = [TableView dequeueReusableCellWithIdentifier:cellType2];
                [arry insertObject:cell atIndex:[myarray count]];

            }
            break;

        case 2:
            if(indexPath.row==0) {
                static NSString *cellType3= @"cellType3";
                UITableViewCell *cell = [TableView dequeueReusableCellWithIdentifier:cellType3];
                [arry insertObject:cell atIndex:[myarray count]];

            }
            break;

        default:
            break;
    }

 }

正如我之前所说,一切正常,直到我按下 + 按钮(按下编辑按钮时显示在左侧)添加新行。然后它显示一个错误:'UITableView 数据源必须从 tableView:cellForRowAtIndexPath 返回一个单元格。

我究竟做错了什么?非常感激任何的帮助。

4

1 回答 1

0

首先,你从来没有真正+alloc-init一个单元格,所以-cellForRowAtIndexPath:很可能返回 nil (-dequeueReusableCellWithIdentifier:不会削减它)。

其次,比较indexPath.row永远[myarray count]不会是真的,因为数组和表可能是从零开始的,但它们的计数不是

于 2012-06-02T01:50:01.550 回答