私のアプリケーションに問題があります。どんな助けでも大歓迎です。基本的にビュー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];
}
私は正しい方法で行っていますか?それとも私が見逃したことはありますか?