2016-04-25 21 views
4

が発生します。たちはUISearchControllerを持っているのUITableViewControllerを持っている我々のアプリでクラッシュ

searchController = [[UISearchController alloc] initWithSearchResultsController:nil]; 
self.searchController.searchResultsUpdater = self; 
[self.searchController.searchBar sizeToFit]; 

self.tableView.tableHeaderView = self.searchController.searchBar; 
self.showFooterView = YES; 

self.searchController.delegate = self; 
self.searchController.dimsBackgroundDuringPresentation = NO; // default is YES 
self.searchController.searchBar.delegate = self; 
self.definesPresentationContext = YES; 

テーブルビューコントローラは、UISearchBarDelegate とUISearchControllerDelegateです。

#pragma mark - UISearchBarDelegate 
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { 
    [searchBar resignFirstResponder]; 
} 

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { 
    self.contacts = self.allContacts; 
    [self.tableView reloadData]; 
} 

は今、すべてが期待通りに動作しますが、そこの機会は、ユーザーが検索を開始すると、検索バーに数文字でタイプは、結果が返されており、ユーザーが検索をキャンセルして、この問題が発生した:

Fatal Exception: NSInvalidArgumentException 
-[_UIFullscreenPresentationController adaptivePresentationController]: unrecognized selector sent to instance 0x147c81ce0 

Fatal Exception: NSInvalidArgumentException 
0 CoreFoundation     0x1842b4f48 __exceptionPreprocess 
1 libobjc.A.dylib    0x198d77f80 objc_exception_throw 
2 CoreFoundation     0x1842bbc5c __methodDescriptionForSelector 
3 CoreFoundation     0x1842b8c00 ___forwarding___ 
4 CoreFoundation     0x1841bccac _CF_forwarding_prep_0 
5 UIKit       0x18a1ba084 -[UISearchController _searchPresentationController] 
6 UIKit       0x189e7d10c -[_UISearchControllerTransplantSearchBarAnimator animateTransition:] 
7 UIKit       0x189b9fa90 __56-[UIPresentationController runTransitionForCurrentState]_block_invoke 
8 UIKit       0x189af856c _runAfterCACommitDeferredBlocks 
9 UIKit       0x189b054bc _cleanUpAfterCAFlushAndRunDeferredBlocks 
10 UIKit       0x189839984 _afterCACommitHandler 
11 CoreFoundation     0x18426bbd0 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ 
12 CoreFoundation     0x184269974 __CFRunLoopDoObservers 
13 CoreFoundation     0x184269da4 __CFRunLoopRun 
14 CoreFoundation     0x184198ca0 CFRunLoopRunSpecific 
15 GraphicsServices    0x18f3d4088 GSEventRunModal 
16 UIKit       0x1898b0ffc UIApplicationMain 

このエラーは、本番環境でFabricによって報告されていますが、これを再現できませんでした。

この問題は次のようになります。Selecting cell after search doesn't segue visually, but loads next view Swift Xcode実際の回答はまだありません。

私はプレゼンテーションコントローラを調べ始めましたが、プレゼンテーションコントローラを特定の方法で設定する特別な機能はありません。

これを修正する方法についてのご意見はありますか?

ありがとうございました

+0

あなたは答えを見つけましたか?またはまだあなたは問題に直面しています。コードレベルでこの問題を確認してください。あなたはアクセスしようとしていますが、それはメモリにありませんでした – karthik

答えて

2

私はSwiftと同じ問題に直面しました。

問題は、SearchbarcontrollerがViewControllerの参照(デリゲート)を保持していることです。

だから、あなたは、ビューのdeallocかは、このような

何かが消えたときに手動で参照を削除するだけです:

- (void)dealloc { 
    self.searchController.searchResultsUpdater = nil; 
    self.searchController.searchBar.delegate = nil; 
    self.searchController.delegate = nil; 
    self.searchController = nil; 
} 
+0

これは私のために働いた –

0

は、下記のように、すべてのあなたの参照をクリーニングしてみてくださいを。

-(void)dealloc{ 
    if (_searchController) { 
     _searchController.searchResultsUpdater = nil; 
     _searchController.searchBar.delegate = nil; 
     _searchController.delegate = nil; 
    } 
} 
+0

残りのコードがnilで実行され、ivarを参照する必要はありませんが、安全に使用できるように、_searchControllerチェックは不要です。 self.getter –