Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift UISearchResultsUpdated和MPMediaItem_Swift_Mpmediaitem_Mpmediaquery_Uisearchresultscontroller - Fatal编程技术网

Swift UISearchResultsUpdated和MPMediaItem

Swift UISearchResultsUpdated和MPMediaItem,swift,mpmediaitem,mpmediaquery,uisearchresultscontroller,Swift,Mpmediaitem,Mpmediaquery,Uisearchresultscontroller,我在搜索MPMediaItems时遇到一些问题。下面的代码将显示视图和筛选结果。取消搜索时(后续搜索仅向已过滤的数据添加条件)、删除文本时更改结果(退格)或滚动到屏幕上最初显示的单元格之外时,将不会清除结果。如何更正此错误以获得前面提到的缺失行为?我尝试过各种方法,包括将filteredTableData和pred设置为nil,但我显然遗漏了一些主要内容。感谢您的帮助。先谢谢你 class SongsViewController: UIViewController, UISearchResult

我在搜索MPMediaItems时遇到一些问题。下面的代码将显示视图和筛选结果。取消搜索时(后续搜索仅向已过滤的数据添加条件)、删除文本时更改结果(退格)或滚动到屏幕上最初显示的单元格之外时,将不会清除结果。如何更正此错误以获得前面提到的缺失行为?我尝试过各种方法,包括将filteredTableData和pred设置为nil,但我显然遗漏了一些主要内容。感谢您的帮助。先谢谢你

class SongsViewController: UIViewController, UISearchResultsUpdating {

@IBOutlet var songsTableView: UITableView!

var tableData = MPMediaQuery.songsQuery()
var song : MPMediaItem?

var tableDataToFilter = MPMediaQuery.songsQuery()
var filteredTableData : MPMediaItemCollection?
var resultSearchController : UISearchController!
var pred : MPMediaPropertyPredicate?

override func viewDidLoad() {
    super.viewDidLoad()

    let nib = UINib(nibName: "SongCell", bundle: nil)
    songsTableView.registerNib(nib, forCellReuseIdentifier: "cell")

    resultSearchController = UISearchController(searchResultsController: nil)
    resultSearchController.searchResultsUpdater = self
    resultSearchController.dimsBackgroundDuringPresentation = true
    resultSearchController.searchBar.sizeToFit()
    songsTableView.tableHeaderView = self.resultSearchController.searchBar
    songsTableView.reloadData()
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if resultSearchController.active {
        let count = filteredTableData!.count
        return count
    } else {
        if let collection = tableData.collections {
        let collectionCount = collection.count
        return collection.count
            }
        }
    return 0
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell     {
    let cell : SongCell = self.songsTableView.dequeueReusableCellWithIdentifier("cell") as! SongCell

    if resultSearchController.active {
        song = filteredTableData!.items[indexPath.row]
        let songName = song!.valueForProperty(MPMediaItemPropertyTitle) as! NSString
        cell.songTitleLabel.text = songName as String
    } else {
     song = tableData.items![indexPath.row]
     if song!.valueForProperty(MPMediaItemPropertyTitle) == nil {
     cell.songTitleLabel.text = "Song Title is Blank" as String
     } else {
     let songName = song!.valueForProperty(MPMediaItemPropertyTitle) as! NSString
     cell.songTitleLabel.text = songName as String
     }

func updateSearchResultsForSearchController(searchController: UISearchController) {
    pred = MPMediaPropertyPredicate(value: searchController.searchBar.text!, forProperty: MPMediaItemPropertyTitle, comparisonType: MPMediaPredicateComparison.Contains)
    tableDataToFilter.addFilterPredicate(pred!)
    filteredTableData = MPMediaItemCollection(items: tableDataToFilter.items!)
    self.songsTableView.reloadData()
}