0

我有一个包含任务的 SQLite DB。每个任务都有一个日期,每个日期可以有多个任务。

我的应用程序仅将一个月的数据加载到可变字典中。每个字典项的键是一个月中日期的字符串 (1, 2, 3 ... 31)。相应的值是该日期的任务数组。因此,对于一个月的每一天,都有一个由 0 个或多个任务组成的数组。

可变字典在根视图控制器中声明。Interface Builder 中的根 viewcontroller 是 table view 的 dataSource 和 delegate。不知何故,应用程序知道根视图控制器从可变字典中获取其数据。我没有指定这一点,所以我想知道如果有多个字典,或者可能是字典和可变数组会发生什么?尽管如此,这无需额外接线即可工作。当根视图控制器将数据加载到表中时,每个节标题都将日期作为其文本,并在下面的各个单元格中列出所有任务。一些标题没有单元格。

现在,要修改任务,我有一个“入口”视图控制器。在表中选择一个任务会导致条目视图控制器将该任务信息加载到文本字段中,我可以在其中更改标题、日期、详细信息或将其标记为已完成。编辑后,条目视图控制器卸载,根(表)视图控制器重新加载,视图的 tableView 调用 reloadData 并且更改很明显。

问题来了:如果我通过单击导航控制器上的 + 按钮添加新任务,它会将我带到相同的条目视图控制器,我在其中设置数据。我通过与编辑现有数据时相同的方法返回到根视图控制器。然而,还没有为新数据创建新单元格!如果我关闭并重新打开应用程序,新数据会正确显示。

由于当应用程序关闭时数据更新和插入从字典的数组写入数据库,这意味着新项目确实已添加到数组之一。

摘要:编辑现有数组项,当表格重新加载数据时,会显示新数据。添加一个数组项,并在表重新加载时被忽略。

怎么了?

4

1 回答 1

3

你可以在 UITableViewController 中添加这样的一行:

[self.tableView reloadData];

这将导致整个 UITableView 被重新加载。但是,我认为首选方法是:

[self.tableView insertRowsAtIndexPaths: indexPaths withRowAnimation: YES];

为此,您需要知道行将出现在哪里(NSIndexPaths 的数组)。

从“入口”ViewController 中更新 UITableViewController 可能更容易。

于 2010-02-12T17:16:07.267 回答