我正在阅读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)中,有一种方法可以保存"正在更改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
已被更改,然后将其设置回tableview?
我除了作者在主控制器(ItemsViewController.m)中编写一个setter,它可以被详细视图控制器(DetailViewController.m)调用,给出新的BNRItem
。
但是这部分可以自动运行"。
谢谢。
答案 0 :(得分:0)
当您指向两个控制器中的相同内存块时,DetailViewController
中显示的更改显然在ItemsViewController.m
中报告。