trever
trever

Reputation: 1003

Filter an Array of data for use in a UITableView

I'm trying to filter an array that I create based on objects (as Strings) that I queried. They show up great, now I just want to filter and remake the array so that I can filter out the information I need. I'm not sure why I'm getting "Result of call 'filter' Is unused" in Xcode. I looked around but I can't figure this one out.

import UIKit

class RegionStoreTableViewController: UITableViewController, UISearchBarDelegate {

var selectedRegionStore : String? = nil
var selectedRegionStoreIndex : Int? = nil
var dataArray = [String]()
var filteredArray = [String]()
var employeeType : String? = nil
var searchText = ""

@IBOutlet weak var regionStoreSearchBar: UISearchBar!

override func viewDidLoad() {
    super.viewDidLoad()

    let prefs = NSUserDefaults.standardUserDefaults()

    if prefs.valueForKey("EmployeeType") != nil {

        employeeType = prefs.valueForKey("EmployeeType") as! String

        // Employee Type

        // Retail
        if employeeType == "Retail" {

            self.navigationItem.title = "Store Selector"

            let query = PFQuery(className: "Stores")
            query.orderByAscending("rStoreNumber")
            query.findObjectsInBackgroundWithBlock({ (store: [AnyObject]?, error: NSError?) -> Void in
                if error == nil {
                    for store in store! {
                        let theStore = store["storeName"] as! String
                        let storeNumber = store["rStoreNumber"] as! String
                        let storeString = storeNumber + " - " + theStore
                        print(theStore)
                        self.dataArray.append(storeString)
                        self.tableView.reloadData()
                    }
                }
            })



        }

        if employeeType == "Corporate" {
            let query = PFQuery(className: "Regions")
            query.orderByAscending("regionName")
            query.findObjectsInBackgroundWithBlock { (region: [AnyObject]?, error: NSError?) -> Void in
                if error == nil {
                    for region in region! {
                        let theRegion = region["regionName"] as! String
                        print(theRegion)
                        self.dataArray.append(theRegion)
                        self.tableView.reloadData()
                    }
                } else {
                    print(error)
                }
            }
        }
    }
}




override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    print(dataArray.count)
    return dataArray.count

}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("RegionStoreCell", forIndexPath: indexPath)

    if searchText.isEmpty {
        cell.textLabel?.text = dataArray[indexPath.row]
    }

    if searchText != "" {
        dataArray.filter() {nil != $0.containsString(searchText) }
    }

    if indexPath.row == selectedRegionStoreIndex {
        cell.accessoryType = .Checkmark
    } else {
        cell.accessoryType = .None
    }
    return cell as UITableViewCell
}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    tableView.deselectRowAtIndexPath(indexPath, animated: true)

    if let index = selectedRegionStoreIndex {
        let cell = tableView.cellForRowAtIndexPath(NSIndexPath(forRow: index, inSection: 0))
        cell?.accessoryType = .None
    }

    selectedRegionStoreIndex = indexPath.row
    selectedRegionStore = dataArray[indexPath.row]

    let cell = tableView.cellForRowAtIndexPath(indexPath)
    cell?.accessoryType = .Checkmark

}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "SaveSelectedRegionStore" {
        let cell = sender as! UITableViewCell
        let indexPath = tableView.indexPathForCell(cell)
        selectedRegionStoreIndex = indexPath?.row
        if let index = selectedRegionStoreIndex {
            selectedRegionStore = dataArray[index]
        }
    }
}

// MARK: Search Bar
// delegate in story board
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
    searchBar.showsCancelButton = true
}

func searchBarTextDidEndEditing(searchBar: UISearchBar) {
    searchBar.showsCancelButton = false
}

func searchBarSearchButtonClicked(searchBar: UISearchBar) {
    // add minimum length of search
    searchText = searchBar.text!
    self.tableView.reloadData()
}

func searchBarCancelButtonClicked(searchBar: UISearchBar) {
    // clear out search box
    searchBar.text = nil
    // clear out search variable
    searchText = ""
    // reload the table
    self.tableView.reloadData()
    // hide keyboard
    searchBar.resignFirstResponder()
}


}

Any suggestions?

Upvotes: 0

Views: 2290

Answers (1)

Dharmesh Kheni
Dharmesh Kheni

Reputation: 71854

I think you need to store your filtered array into another array.

let filterArray = dataArray.filter() {nil != $0.containsString(searchText) 

Upvotes: 1

Related Questions