使用UINavigationController从另一个Controller更新或重新加载UIViewController?

时间:2011-09-08 00:09:11

标签: ios uitableview uiviewcontroller uinavigationcontroller

我有一个iOS应用程序,它有一个mainControllerView,在那里我创建了一个UINavigationController,然后我将UINavController推入一个名为FirstViewController的新UIViewController,以及其他视图。

总之是这样的:

MainController(UIVIewController) 
   |  
    --> UINavController 
         | 
          --> FirstViewController(UIViewController)
         |
          --> SecondViewController(UIViewController)
         |
          --> AddViewController

此外,在FirstViewController内部我有一个UITableView,UITableView由CoreData提供。

现在,我决定在(NavigationBar的)右上角添加一个“加”系统按钮,将另一行添加到数据库中,因此应该反映到UITableview中。

我所做的是创建另一个自定义视图,名为AddViewController,当我按下“加号”按钮时,它会被推入NavController堆栈。在那个视图中,我刚刚添加了一些文本字段和一个按钮来更新数据库,这是有效的,但是,当我按下时,我找不到更新UITableView的方法,这是在FirstViewController中。

再简而言之,

UINavController(with FirstViewController)
 1.-When I press the "+" button another UIViewController (AddViewContronller) 
    is pushed
 2.-In that view I present a few UITextfields to be filled.
 3.-I press a "save" button on the NavigationBar, that button save info 
    into the DB and then it goes back the FirstViewController, popping the current
    UIViewController(AddViewController)
 4.-FirstViewController and its tableView is on the main screen again, however
    the rows are still the same.

当我按下AddViewController中的保存按钮时,我一直在尝试更新FirstViewController,但正如我所说,我一直没有成功。

我没试过的选项是当我跳到另一个UIViewController然后在后面重新分配时释放FirstViewController但是我不认为这是一个好主意因为使用NavigationController我可以跟踪我的所有视图控制器进入堆栈。

所以任何人都知道如何刷新/重新加载来自另一个UIViewController的View(UIViewController),在我的例子中从AddViewController更新FirstViewController视图?

另外,我想听听我是否走在正确的轨道上?或者我想要做什么可以通过另一种方法,如模态对话框轻松完成?

任何帮助都会非常感激

欢呼声, 劳尔

2 个答案:

答案 0 :(得分:1)

您可以尝试处理NSManagedObjectContextObjectsDidChangeNotification通知。例如:

- (void)viewDidLoad {
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(dataDidChange)
                                                 name:NSManagedObjectContextObjectsDidChangeNotification
                                               object:nil];
}

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:NSManagedObjectContextObjectsDidChangeNotification
                                                  object:nil];
}

- (void)dataDidChange {
    [self.tableView reloadData];
}

答案 1 :(得分:0)

首先,如果您不熟悉UITableView,请阅读Table View Programming Guide for iOS

如果您使用核心数据填充UITableView,您几乎总是应该使用NSFetchedResultsController