细节视图控制器如何将所做的更改告知主控制器?
How the detail view controller told the main controller about the changes made?
我正在阅读 Big Nerd Ranch 一书,我正在阅读有关导航控制器的第 10 章。
在主控制器中,有一个 TableView ( https://github.com/bignerdranch/iOS3eSolutions/blob/master/11.%20Homepwner/Homepwner/Homepwner/ItemsViewController.m ),其中有两个与详细视图交互的方法:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[self tableView] reloadData];
}
- (void)tableView:(UITableView *)aTableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailViewController *detailViewController = [[DetailViewController alloc] init];
NSArray *items = [[BNRItemStore sharedStore] allItems];
BNRItem *selectedItem = [items objectAtIndex:[indexPath row]];
// Give detail view controller a pointer to the item object in row
[detailViewController setItem:selectedItem];
// Push it onto the top of the navigation controller's stack
[[self navigationController] pushViewController:detailViewController
animated:YES];
}
在详细视图控制器(https://github.com/bignerdranch/iOS3eSolutions/blob/master/11.%20Homepwner/Homepwner/Homepwner/DetailViewController.m)中,有一种方法可以更改"saves" BNRItem
:
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
// Clear first responder
[[self view] endEditing:YES];
// "Save" changes to item
[item setItemName:[nameField text]];
[item setSerialNumber:[serialNumberField text]];
[item setValueInDollars:[[valueField text] intValue]];
}
代码运行良好:
我了解主控制器如何设置要编辑的对象,但我不明白主视图控制器如何知道 BNRItem
已更改,然后将其设置回表视图?
除了作者在主控制器 (ItemsViewController.m ) 中写了一个 setter 之外,它可以被详细视图控制器 (DetailViewController.m) 调用,给出新的 BNRItem
。
但是这部分有效 "automatically".
谢谢。
由于您在两个控制器中指向相同的内存块,因此在 DetailViewController
中所做的更改显然会在 ItemsViewController.m
中报告。
我正在阅读 Big Nerd Ranch 一书,我正在阅读有关导航控制器的第 10 章。
在主控制器中,有一个 TableView ( https://github.com/bignerdranch/iOS3eSolutions/blob/master/11.%20Homepwner/Homepwner/Homepwner/ItemsViewController.m ),其中有两个与详细视图交互的方法:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[self tableView] reloadData];
}
- (void)tableView:(UITableView *)aTableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailViewController *detailViewController = [[DetailViewController alloc] init];
NSArray *items = [[BNRItemStore sharedStore] allItems];
BNRItem *selectedItem = [items objectAtIndex:[indexPath row]];
// Give detail view controller a pointer to the item object in row
[detailViewController setItem:selectedItem];
// Push it onto the top of the navigation controller's stack
[[self navigationController] pushViewController:detailViewController
animated:YES];
}
在详细视图控制器(https://github.com/bignerdranch/iOS3eSolutions/blob/master/11.%20Homepwner/Homepwner/Homepwner/DetailViewController.m)中,有一种方法可以更改"saves" BNRItem
:
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
// Clear first responder
[[self view] endEditing:YES];
// "Save" changes to item
[item setItemName:[nameField text]];
[item setSerialNumber:[serialNumberField text]];
[item setValueInDollars:[[valueField text] intValue]];
}
代码运行良好:
我了解主控制器如何设置要编辑的对象,但我不明白主视图控制器如何知道 BNRItem
已更改,然后将其设置回表视图?
除了作者在主控制器 (ItemsViewController.m ) 中写了一个 setter 之外,它可以被详细视图控制器 (DetailViewController.m) 调用,给出新的 BNRItem
。
但是这部分有效 "automatically".
谢谢。
由于您在两个控制器中指向相同的内存块,因此在 DetailViewController
中所做的更改显然会在 ItemsViewController.m
中报告。