一个简单的问题。我在navigationcontroller中有一个tableview。当我触摸一个单元格时,它会使用单元格中的信息向视图控制器推送,因此我可以在新视图中对其进行编辑。现在这工作正确(我们可以称之为信息路径:“rootviewcontroller - >推动viewcontroller”)。但是当我在新视图中单击“保存”时,我希望编辑的值在调用popviewcontroller(informationpath:“push viewcontroller - > rootviewcontroller”)之前返回到rootviewcontroller,因此编辑后的值可以显示在tableview中。
对此有正确的解决方法吗?
编辑:
pushViewController和popViewController正在工作。当调用Save-button(popViewController)时,我只询问了将编辑过的信息返回到rootViewController以便在tableview中显示的最佳方法。我想我只需要直接从推送的viewController中使用新信息编辑pList。虽然我更愿意将新信息发送到rootViewController并让它处理对pList文件的访问。
答案 0 :(得分:0)
您可以尝试在popViewController之前重新加载数据,但是您应该发布一些代码。
答案 1 :(得分:0)
所有UIViewControllers都有navigationController
方法。将视图控制器推送到导航控制器时,该属性设置为指向导航控制器。
因此,只需在视图控制器中调用[self.navigationController popViewControllerAnimated:YES];
。
此外,不要混淆视图和视图控制器。在视图中单击“保存”时,应确保“保存”按钮调用视图控制器上的方法,该方法又与导航控制器通信。
答案 2 :(得分:0)
点击一行您将使用适当的信息进入新视图。
在这里执行一些操作,例如编辑数据。 因此,首先保存更改单击保存按钮(通过调用IBAction),在此IBAction方法将检查wheter(更改已成功保存)然后调用
[self.navigationController popViewControllerAnimated:YES];
确保表由更新的数据库重新加载(通过在viewWillAppear方法中调用数据库方法来更改此数据数组)。
答案 3 :(得分:0)
我有同样的情况 - 两个表格视图。第一台电视显示数据库记录列表,当点击一个时,它会进入第二个显示记录详细信息的TableView。我通过将详细信息TableViewController推送到导航控制器堆栈来实现此目的。到目前为止,这很简单。
我遇到的问题是在更新详细信息表视图(控制器)中的记录后,我想让列表视图控制器知道,以便它可以更新记录列表。
我做的第一件事是向详细信息表视图控制器添加属性,以便在记录列表中选择行时,列表控制器可以将核心数据管理实体传递给详细信息控制器。
与此同时,我还将列表控制器添加为核心数据更改事件的观察者,如下所示:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataSaved:) name:NSManagedObjectContextDidSaveNotification object:nil];
因此,如果详细信息表视图和控制器更新记录,则列表控制器调用它的dataSaved:
方法,并传递NSNotification对象。
在dataSaved:
方法中,我检查对象,如果正在编辑的核心数据实体在更新列表中,那么我设置一个标志来表示需要更新。但是,如果插入列表中有记录,则表示已创建新记录并将其插入数据库,因此设置标志以触发列表表视图的完全重新加载。
当用户返回列表视图控制器时,会触发viewDidAppear:
方法。在这个方法中,我检查标志并调用
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
如果记录已更新,则重新加载特定记录,或者如果插入新记录则告诉表视图执行完全重新加载。
最后,我删除列表控制器作为核心数据通知的观察者,因为它不再感兴趣。
我不知道这是否是推荐的方法,但到目前为止它对我有用。