我有一个包含任务的SQLite DB。每个任务都有一个日期,并且每个日期可以有多个任务。
我的应用程序只将一个月的数据加载到可变字典中。每个字典项的键是一个月中日期的字符串(1,2,3...31)。相应的值是该日期的任务数组。因此,对于一个月中的每一天,都有一个包含0个或更多任务的数组。
可变字典是在根viewcontroller中声明的。Interface Builder中的根viewcontroller是表视图的dataSource和委托。不知何故,应用程序知道根视图控制器从可变字典中获取数据。我没有指定这一点,所以我想知道如果有多个字典,或者一个字典和一个可变数组会发生什么?尽管如此,这并不需要额外的布线。当根视图控制器将数据加载到表中时,每个部分标题都将日期作为文本保存,并在下面的单个单元格中列出所有任务。有些标题没有单元格。
现在,为了修改任务,我有一个"entry“视图控制器。选择表中的任务会使条目视图控制器将该任务信息加载到文本字段中,我可以在文本字段中更改标题、日期、详细信息或将其标记为完成。编辑之后,条目viewcontroller卸载,根(表) viewcontroller重新加载,视图的tableView调用reloadData,并且更改是显而易见的。
这里有一个问题:如果我通过单击导航控制器上的+按钮添加一个新任务,它会将我带到相同的入口视图控制器,我在那里设置数据。我通过与编辑现有数据时相同的方法返回到根视图控制器。新数据还没有创建新的单元格!如果我关闭并重新打开应用程序,新数据将正确显示。
由于数据更新和插入是在应用程序关闭时从字典的数组写入数据库的,这意味着新项实际上是添加到其中一个数组中。
摘要:编辑已有数组项,表重新加载数据时会显示新的数据。添加数组项,重载表时忽略数组项。
怎么了?
发布于 2010-02-12 17:16:07
您可以在UITableViewController中添加如下所示的行:
[self.tableView reloadData];
这将导致重新加载整个UITableView。但是,我认为首选的方法是:
[self.tableView insertRowsAtIndexPaths: indexPaths withRowAnimation: YES];
为此,您需要知道行将出现在何处(NSIndexPaths数组)。
从“入口”ViewController中更新UITableViewController可能更容易。
https://stackoverflow.com/questions/2253532
复制