我的應用程序出現問題。任何幫助將不勝感激。基本上它是從視圖A到視圖B,然後從視圖B回來。從其他視圖回來後從表視圖重新加載數據
在視圖A中,它具有從數據庫中加載的動態數據,並顯示在表視圖上。在這個頁面中,它也有編輯按鈕,不在導航欄上。當用戶選中編輯按鈕時,它會轉到顯示選取視圖的視圖B.用戶可以在這裏進行任何更改。一旦完成,用戶在導航欄上選中後退按鈕,它將更改保存到NSUserDefaults中,通過彈出視圖B返回到視圖A.
當回到視圖A時,它應該得到來自UIUserDefaults的新數據,它就這樣做了。我用NSLog打印出控制檯並顯示正確的數據。它也應該調用viewWillAppear:方法來獲取表視圖的新數據,但它沒有。它甚至沒有調用tableView:numberOfRowsInSection:方法。我在這個方法中放置了一條NSLog語句,但沒有在控制檯中打印出來。
結果,視圖A仍然有舊數據。在視圖A中獲取新數據的唯一方法是停止並啓動應用程序。
視圖A和視圖B都是UIViewController
的子類,其中UITableViewDelegate
和UITableViewDataSource
。
這裏是我的視圖中的代碼:
- (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];
}
我在做正確的方法嗎?還是有什麼我錯過了?