2017-01-09 10 views
1

単純な配列のデータを検索してフィルタリングし、ユーザーがクリックするためのフィルタリングされたデータを表示するが、その原因となるエラーが表示されるSearchFieldを使用するTableViewController私のアプリ全体がクラッシュするSwift UITableViewController検索エラー - [NSInternalInconsistencyException]

私が最初にアプリケーションを実行すると、検索フィールドに文字を入力すると、最終的な殺害の前に2つの警告が表示されます。 search field active

第二:

実行した後:ここでは、各インスタンスのスクリーンショットは、私が得る各コンソールのエラーと一緒だ right at launch

第一コンソールログ:検索フィールドをクリック

2017-01-09 21:20:30.060553 
[Warning] Attempting to load the view of a view controller while 
it is deallocating is not allowed and may result in 
undefined behavior 
(<UISearchController: 0x7f9d235055b0>) 

コンソールログ:

2017-01-09 21:21:18.570764 
[MC] System group container for 
systemgroup.com.apple.configurationprofiles path is 
/Users/zanaaziz/Library/Developer/CoreSimulator/Devices/ 
3A5A6007-4A7E-4DAF-8E41-4B4A5A7FB0A4/data/Containers/Shared/SystemGroup/ 
systemgroup.com.apple.configurationprofiles 
2017-01-09 21:21:18.571643 
[MC]Reading from private effective user settings. 
enter image description here

決勝コンソールログ:

2017-01-09 21:21:45.278 
*** Assertion failure in -[UITableView 
dequeueReusableCellWithIdentifier:forIndexPath:], 
/BuildRoot/Library/Caches/ 
com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.6.21/UITableView.m:6600 
2017-01-09 21:21:45.283 Kurdish Dictionary[66678:6174997] 
***Terminating app due to uncaught exception 
'NSInternalInconsistencyException', reason: 'unable to dequeue a cell 
with identifier cell - must register a nib or a class for the 
identifier or connect a prototype cell in a storyboard' 
*** First throw call stack: 
(
0 CoreFoundation      0x0000000106078d4b 
__exceptionPreprocess + 171 
1 libobjc.A.dylib      0x000000010298721e 
objc_exception_throw + 48 
2 CoreFoundation      0x000000010607ce42 
[NSException raise:format:arguments:] + 98 
3 Foundation       0x0000000102f9466d - 
[NSAssertionHandler 
handleFailureInMethod:object:file:lineNumber:description:] + 195 
4 UIKit        0x000000010399d1e8 
[UITableView dequeueReusableCellWithIdentifier:forIndexPath:] + 259 
5 Kurdish Dictionary     0x00000001028dd326 _TFC18Kurdish_Dictionary25SearchTableViewController9tableViewfTCSo11UITableView12cellForRowAtV10Foundation9IndexPath_CSo15UITableViewCell + 150 
6 Kurdish Dictionary     0x00000001028dd627 _TToFC18Kurdish_Dictionary25SearchTableViewController9tableViewfTCSo11UITableView12cellForRowAtV10Foundation9IndexPath_CSo15UITableViewCell + 87 
7 UIKit        0x00000001039b0584 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 757 
8 UIKit        0x00000001039b07e2 -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 74 
9 UIKit        0x00000001039842b0 -[UITableView _updateVisibleCellsNow:isRecursive:] + 3295 
10 UIKit        0x00000001039b9b64 -[UITableView _performWithCachedTraitCollection:] + 110 
11 UIKit        0x00000001039a03be -[UITableView layoutSubviews] + 222 
12 UIKit        0x0000000103907ab8 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1237 
13 QuartzCore       0x0000000108ed5bf8 -[CALayer layoutSublayers] + 146 
14 QuartzCore       0x0000000108ec9440 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 
15 QuartzCore       0x0000000108ec92be _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 
16 QuartzCore       0x0000000108e57318 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 280 
17 QuartzCore       0x0000000108e843ff _ZN2CA11Transaction6commitEv + 475 
18 QuartzCore       0x0000000108e84d6f _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 113 
19 CoreFoundation      0x000000010601d267 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 
20 CoreFoundation      0x000000010601d1d7 __CFRunLoopDoObservers + 391 
21 CoreFoundation      0x0000000106001f8e __CFRunLoopRun + 1198 
22 CoreFoundation      0x0000000106001884 CFRunLoopRunSpecific + 420 
23 GraphicsServices     0x0000000107fcfa6f GSEventRunModal + 161 
24 UIKit        0x0000000103842c68 UIApplicationMain + 159 
25 Kurdish Dictionary     0x00000001028dc1ef main + 111 
26 libdyld.dylib      0x000000010702868d start + 1 
27 ???         0x0000000000000001 0x0 + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type 
NSException 
(lldb) 

そして、この私のSWIFTコード:文字入力した後にクラッシュ3210

のApp

import UIKit 

class SearchTableViewController: UITableViewController, UISearchResultsUpdating { 

let data = ["Aftershock","Asses","Apple","Alien"] 
var filteredData = [String]() 
var resultSearchController = UISearchController() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.resultSearchController = UISearchController(searchResultsController: nil) 
    self.resultSearchController.searchResultsUpdater = self 
    self.resultSearchController.dimsBackgroundDuringPresentation = false 
    self.resultSearchController.searchBar.sizeToFit() 

    self.tableView.tableHeaderView = self.resultSearchController.searchBar 
    self.tableView.reloadData() 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

override func numberOfSections(in tableView: UITableView) -> Int { 
    // #warning Incomplete implementation, return the number of sections 
    return 1 
} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if (self.resultSearchController.isActive){ 
     return self.filteredData.count 
    }else{ 
     return 0 
    } 
} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as UITableViewCell? 

    // Configure the cell... 
    cell!.textLabel?.text = self.filteredData[indexPath.row] 
    return cell! 
} 

func updateSearchResults(for searchController: UISearchController) { 
    self.filteredData.removeAll(keepingCapacity: false) 

    let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!) 
    let array = (self.data as NSArray).filtered(using: searchPredicate) 
    self.filteredData = array as! [String] 

    self.tableView.reloadData() 
    } 
} 

は正直任意の助けが私には金なり、その理由は私を殺す! お時間をいただきありがとうございます。

答えて

2

UITableViewCell.textLabelプロパティを使用しているので、UITableViewCellをデフォルトスタイルの1つで使用するとします。

tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)には、このような識別子を持つ再利用可能なセルを登録することなく、電話をかけようとしています。あなたのコードにtableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")へのコールがviewDidLoadにありません。

+0

それは働いた!!!!どうもありがとうございます!!私はまだ最初の2つの警告を得ています、それらを引き起こす何らかのアイデアはありますか? –

+1

2番目のログは警告ではありません。最初のものについては、http://stackoverflow.com/questions/32704169/attempting-to-load-the-view-of-a-view-controller-while-it-is-deallocating-uiを参照してください。 'UISearchController'を2回作成するのではなく、オプションのコントローラを格納する変数を宣言する必要があります(あなたの場合、暗黙のうちにアンラップさせても問題ありません):' var resultSearchController = UISearchController() ' )。この方法では、コンパイラは初期化されていない変数については不平を言うことはありません。 – crizzis

+1

これを有効にするには、 'viewDidLoad'から' self.tableView.reloadData() 'への不要な呼び出しも削除してください。 – crizzis

関連する問題