我的申请有问题。任何帮助将不胜感激。基本上是从视图 A 到视图 B,然后从视图 B 回来。
在视图 A 中,它具有从数据库中加载的动态数据,并显示在表视图上。在这个页面中,它也有编辑按钮,而不是在导航栏上。当用户点击编辑按钮时,它会转到视图 B,其中显示了选择视图。用户可以在此处进行任何更改。完成后,用户点击导航栏上的后退按钮,将更改保存到 NSUserDefaults 中,然后通过弹出视图 B 返回视图 A。
返回视图 A 时,它应该从 UIUserDefaults 中获取新数据,并且确实如此。我使用 NSLog 打印到控制台,它显示了正确的数据。它还应该调用 viewWillAppear: 方法来获取表格视图的新数据,但它没有。它甚至没有调用 tableView:numberOfRowsInSection: 方法。我在这个方法中放置了一个 NSLog 语句,但没有在控制台中打印出来。
结果,视图 A 仍然有旧数据。在视图 A 中获取新数据的唯一方法是停止并启动应用程序。
视图 A 和视图 B 都是UIViewController
、UITableViewDelegate
和的子类UITableViewDataSource
。
这是我在视图 A 中的代码:
- (void)viewWillAppear:(BOOL)animated {
NSLog(@"enter in Schedule2ViewController ...");
// load in data from database, and store into NSArray object
//[self.theTableView reloadData];
[self.theTableView setNeedsDisplay];
//[self.theTableView setNeedsLayout];
}
在这里,“theTableView”是一个 UITableView 变量。我尝试了“reloadData”、“setNeedsDisplay”和“setNeedsLayout”这三种情况,但似乎都不起作用。
在视图B中,这里是导航栏上的返回按钮对应的方法。
- (void)viewDidLoad {
UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(savePreference)];
self.navigationItem.leftBarButtonItem = saveButton;
[saveButton release];
}
- (IBAction) savePreference {
NSLog(@"save preference.");
// save data into the NSUSerDefaults
[self.navigationController popViewControllerAnimated:YES];
}
我做对了吗?或者有什么我错过的吗?