2017-07-16 61 views
2

我想我過濾結構時:錯誤濾波結構

class Song: CustomStringConvertible { 
    let title: String 
    let artist: String 

    init(title: String, artist: String) { 
     self.title = title 
     self.artist = artist 
    } 

    var description: String { 
     return "\(title) \(artist)" 
    } 
} 

var songs = [ 
    Song(title: "Song Title 3", artist: "Song Author 3"), 
    Song(title: "Song Title 2", artist: "Song Author 2"), 
    Song(title: "Song Title 1", artist: "Song Author 1"), 
    Song(title: "Song Title 0", artist: "Song Author 1") 
] 

上一個UITableView dispays:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    var cell: LibrarySongTableViewCell! = tableView.dequeueReusableCell(withIdentifier: "Library Cell") as! LibrarySongTableViewCell 

    cell.titleLabel = songs[indexPath.row].title 
    cell.artistLabel = songs[indexPath.row].artist 
} 

這樣的:

var filteredArtist = songs.filter { song -> Bool in 
    return song.artist == "Artist Name" 
} 

但是,我每當我將cellForRowAtindexPath更改爲

時,都會收到錯誤 Thread 1: EXC_BAD_INSTRUCTION
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    var cell : LibrarySongTableViewCell! = tableView.dequeueReusableCell(withIdentifier: "Library Cell") as! LibrarySongTableViewCell 

    cell.titleLabel = filteredArtist[indexPath.row].title 
    cell.artistLabel = filteredArtist[indexPath.row].artist 
} 

我該如何解決這個問題?我就在這行錯誤:

cell.titleLabel = filteredArtist[indexPath.row].title 
+0

tableView:tableView:numberOfRowsInSection方法最可能的是,你的'的tableView(_:numberOfRowsInSection:)'方法不返回的(過濾!)輸入正確的數字。 –

+0

爲了完成過濾,你是否實現了UISearchController?如果沒有,我會建議你閱讀其中一個教程。它可以幫助您更健壯地設計解決方案。 (*我不認爲你想改變你的'cellForRowAt'。通常情況下,新的過濾的tableView被繪製在第一個'*) – AgRizzo

回答

0

由於@馬丁 - [R說在註釋中,該問題可能與行的表格的總數。

嘗試寫更新這樣

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return filteredArtist.count 
} 
+0

LOL上。非常感謝!我不敢相信我錯過了那個笑聲。 –