0

ストーリーボードを使用して、提案されたアプリのインターフェイスをレイアウトしています。検索バー コントローラーが上にあるテーブル ビュー コントローラーにセグエするボタンがあります。ここにある検索の実行方法に関するAppleの非常に基本的な例の1つに従っています。この例では、単一のテーブル ビュー コントローラーを使用し、検索語データを保存して、後続のビューで取得できるようにします。検索データは、次のコードを使用して保存されます (オブジェクト定義も含めています)。

@interface SearchTableViewController : UITableViewController {
  NSMutableArray *listOfLists;
  NSMutableArray *filteredListOfLists;
  NSString *savedSearchTerm;
  NSInteger savedScopeButtonIndex;
  BOOL searchWasActive;
}
@property (nonatomic, strong) NSMutableArray *listOfLists;
@property (nonatomic, strong) NSMutableArray *filteredListOfLists;
@property (nonatomic, copy) NSString *savedSearchTerm;
@property (nonatomic) NSInteger savedScopeButtonIndex;
@property (nonatomic) BOOL searchWasActive;
@end

- (void)viewDidDisappear:(BOOL)animated
{
  [super viewDidDisappear:animated];
  // save the state of the search UI so that it can be restored if the view is re-created
  self.searchWasActive = [self.searchDisplayController isActive];
  self.savedSearchTerm = [self.searchDisplayController.searchBar text];
  self.savedScopeButtonIndex = [self.searchDisplayController.searchBar selectedScopeButtonIndex];
}

データを保存するための 3 つのコア行をコメント アウトすると、すべて正常に機能します (検索オブジェクトのステータスを記憶することを除く)。私が考えているのは、セグエの一部としてビューが「破棄」されているため(おそらくviewDidDisappearメソッドが呼び出される前)、「自己」が使用できなくなっていることです。

この問題を解決する正しい/最善の方法は何ですか?

4

1 に答える 1

0

どうですか

[[NSUserDefaults standardUserDefaults] 
   setValue:searchDisplayController.searchBar.text 
     forKey:"SavedSearchTerm"];

[[NSUserDefaults standardUserDefaults]
   valueForKey:"SavedSearchTerm"];

?

でこれを行うviewWillDisappearと、オブジェクトがまだそこにあることが保証されます。

于 2012-01-19T18:11:31.570 に答える