gpt4 book ai didi

ios - 在 TableView iOS 中添加一行

转载 作者:可可西里 更新时间:2023-11-01 03:05:49 24 4
gpt4 key购买 nike

我是 iOS 开发的新手,尝试一些本应简单的事情让我感觉很糟糕;每次用户单击现有行之一时在 TableView 中添加额外的行。该操作没有实际目的,我只是想了解 TableView 的行为。

所以我做了以下事情:

我使用了基于 Split View的模板,并将 RootViewController 中的行数更改为 30。

- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
return 30;
}

tableView:didSelectRowAtIndexPath 方法看起来如下:

- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
/*
When a row is selected, set the detail view controller's detail item to the item associated with the selected row.
*/
NSMutableArray* paths = [[NSMutableArray alloc] init];
NSIndexPath *indice = [NSIndexPath indexPathForRow:30 inSection:0];
[paths addObject:indice];
detailViewController.detailItem = [NSString stringWithFormat:@"Second Story Element %d with all its information and bla bla bla", indexPath.row];
[[self tableView] beginUpdates];
[self.tableView insertRowsAtIndexPaths:(NSArray *) paths withRowAnimation:UITableViewRowAnimationNone];
[[self tableView] endUpdates];
}

当我执行程序并单击其中一个元素时,我收到以下错误:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (30) must be equal to the number of rows contained in that section before the update (30), plus or minus the number of rows inserted or deleted from that section (1 inserted, 0 deleted).'

我没有更改模板提供的代码的任何其他部分。

我广泛阅读了 Apple 的文档以及对以下问题的回答: Add a row dynamically in TableView of iphonehow to properly use insertRowsAtIndexPaths?

第二个问题似乎解决了同样的问题,但我无法理解发生了什么。它们对数据源意味着什么?我更好理解的响应如下:

It's a two step process: First update your data source so numberOfRowsInSection and cellForRowAtIndexPath will return the correct values for your post-insert data. You must do this before you insert or delete rows or you will see the "invalid number of rows" error that you're getting.

数据源的更新意味着什么?

非常感谢示例代码,因为我非常沮丧。

顺便说一下,我所做的一切都与进入编辑模式无关,是吗?

最佳答案

您需要使 tableView:numberOfRowsInSection: 返回的计数保持同步!

因此,当您有 30 行然后告诉 tableview 插入新行时,您需要确保 tableView:numberOfRowsInSection: 现在将返回 31。

- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section
{
return self.rowCount;
}

- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
self.rowCount++;

[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:(NSArray *) paths withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
}

在实践中,您可能会使用数组来跟踪您的行 return [self.rows count];

关于ios - 在 TableView iOS 中添加一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10838108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com