アプリケーションに問題があります。どんな助けでも大歓迎です。基本的には、ビュー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」の3つのケースすべてを試しましたが、機能しなかったようです。
ビュー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];
}
私は正しいやり方でやっていますか?それとも私が見逃したものはありますか?