iphone – NSInternalInconsistencyException(行数无效) - 代码日志

iphone – NSInternalInconsistencyException(行数无效)

每当我的UITableView中有数据,我开始删除,它的工作正常。但是,当我到达表中的最后一个对象,并删除它,它崩溃。

由于未被捕获的异常’NSInternalInconsistencyException’终止应用程序,原因:’无效的更新:第0节中的行数无效。更新(1)之后的现有部分中包含的行数必须等于该行中包含的行数更新前的部分(1),加或减去从该部分插入或删除的行数(0插入,1删除)。

以下是我正在编辑的东西:

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        if ([myData count] >= 1) {
            [tableView beginUpdates];
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
            [myData removeObjectAtIndex:[indexPath row]];

            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsDirectory = [paths objectAtIndex:0];
            NSString *somepath = [documentsDirectory stringByAppendingPathComponent:@"something.plist"];
            [myData writeToFile:somepath atomically:YES];
            [table reloadData];
            if ([myData count] == 0) {
                [tableView endUpdates];
                [tableView reloadData];
            }
            else {
            [tableView endUpdates];
            }
        }
    }   
}

还有这个:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    if ([myData count] != 0) {
        return [myData count];
    }
    else {
        return 1;
    }
}

我返回1的原因是因为我正在制作一个在CellForRowAtIndexPath中显示“没有数据保存”的单元格。这就是我的意思:

-(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] autorelease];
    }    
    if ([cityData count] != 0) {
        //normal setup removed for clarity
    }
    else {
        cell.textLabel.text = @"No saved data!";
    cell.textLabel.font = [UIFont boldSystemFontOfSize:14]; 
    cell.textLabel.textAlignment = UITextAlignmentCenter;
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.tag = 1;
    return cell;
    }
}

那么我在编辑代码中做错什么来得到这个错误?谢谢!

如果您删除表中的最后一行,则UITableView代码期望剩余0行。它调用您的UITableViewDataSource方法来确定剩余的数量。因为你有一个“无数据”单元格,它返回1,而不是0.所以当你删除表中的最后一行时,尝试调用-insertRowsAtIndexPaths:withRowAnimation:插入你的“No data”行。此外,您不应该在此方法中的任何地方调用-reloadData。 -endUpdates将重新加载受影响的行。试试这个:

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        if ([myData count] >= 1) {
            [tableView beginUpdates];
            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
            [myData removeObjectAtIndex:[indexPath row]];

            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsDirectory = [paths objectAtIndex:0];
            NSString *somepath = [documentsDirectory stringByAppendingPathComponent:@"something.plist"];
            [myData writeToFile:somepath atomically:YES];

            if ([myData count] == 0) {
                [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
            }
            [tableView endUpdates];
        }
    }   
}
http://stackoverflow.com/questions/5454708/nsinternalinconsistencyexception-invalid-number-of-rows

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:iphone – NSInternalInconsistencyException(行数无效)