2017-04-07 7 views
12

に私はviewDidLoadの内部tableHeaderViewとしてsearchBarを設定しようとした違いのviewDidLoad

func fetch() { 
    let fetchRequest:NSFetchRequest<Phone> = Phone.fetchRequest() 
    fetchRequest.sortDescriptors = [NSSortDescriptor.init(key: "header", ascending: true), NSSortDescriptor.init(key: "date", ascending: true)] 

    self.fetchedResultsController = NSFetchedResultsController.init(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: "header", cacheName: nil) 
    self.fetchedResultsController.delegate = self 

    do { 
     try self.fetchedResultsController.performFetch() 
     self.tableView.reloadData() 
    } catch {} 

} 

しかし、私はしないでください彼らは動作していないことを理解する。 Xcodeがクラッシュし、実際に何も起こりません。そして、私はviewDidLoadメソッド内の何かを変更しようとしました:

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.fetch() 
    self.tableView.reloadData() 

    // SearchController initializiation 
    self.searchController = UISearchController.init(searchResultsController: nil) 
    self.searchController.delegate = self 
    self.searchController.searchBar.delegate = self 
    self.searchController.searchBar.sizeToFit() 
    self.searchController.searchResultsUpdater = self 
    self.searchController.searchBar.barTintColor = UIColor.white 
    self.searchController.searchBar.keyboardAppearance = .default 
    self.searchController.searchBar.backgroundColor = UIColor.white 
    self.searchController.hidesNavigationBarDuringPresentation = true 
    self.searchController.obscuresBackgroundDuringPresentation = false 


    self.tableView.tableHeaderView = self.searchController.searchBar 
    self.definesPresentationContext = true 



} 

成功!適切に動作します。違いは何か分かりませんか?

+1

クラッシュ時のエラーメッセージは何ですか?それがクラッシュする正確な線は何ですか?スタックトレースを共有してください。 –

+0

何もない!コンソールのみ(lldb) – Mannopson

+1

コンソールに情報はありますか?問題を解決するための十分な情報がありません。 –

答えて

1

fetchedResultsControllerが初期化される前でもsearchResultsUpdaterとsearchBarのデリゲートを設定しているからです。あなたのコードのsearchResultsUpdaterまたはsearchBarのデリゲートメソッドがあなたのfetchedResultsControllerにアクセスしていて、アプリケーションクラッシュを起こさないようにしています。私の提案は、クラッシュがsearchResultsControllerを計算または遅延プロパティとして作ることを避けることです。

2

viewDidLoad()メソッドからself.tableView.reloadData()を削除すると、データが読み込まれずに再読み込みされます。