UISearchController

heliohelio Membre
janvier 2016 modifié dans API UIKit #1

Bonjour à  tous,


Voici un nouveau problème auquel je suis confronté,


lorsque je clique sur le Annuler d'un composant UISearchController, j'ai le message suivant :


 


Mutating method sent to immutable object


 


"Annuler" permettrait d'effacer toutes les données de la tableView


 


Voici mon code en gros :



Class SearchViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

var searchingDataArray = NSMtableArray()

override func viewDidLoad() {
super.viewDidLoad()

searchingDataArray = []

tableView.delegate = self
tableView.dataSource = self

self.navigationController?.setNavigationBarHidden(false, animated: true)

self.configureView()

self.jsonParser()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false

// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
}

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

// MARK: - Table view data source

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

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return searchingDataArray.count
}


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("Cell")! as UITableViewCell
cell.textLabel?.text = searchingDataArray[indexPath.row].valueForKey("nom") as? string
// Configure the cell...
return cell
}

func jsonParser() {
//...
searchingDataArray = json["results"]
tableView.reloadData()
//...
}

func searchBarSearchButtonClicked(searchBar: UISearchBar) {


}

func searchBarCancelButtonClicked(searchBar: UISearchBar) {

searchingDataArray.removeAllObjects()
tableView.reloadData()

}




}

Qu'est-ce qui génère ce message d'après vous ?


Merci.


Réponses

  • LarmeLarme Membre
    janvier 2016 modifié #2

    searchingDataArray = json["results"] 

    99,9% de chances de mettre un NSArray (json["results"])  dans searchingDataArray même s'il est défini comme mutable (NSMutableArray)


     


     


    Du coup:



    searchingDataArray.removeAllObjects()

    ça ne marche pas, NSArray n'a pas removeAllObjects().


     


    Possibilité (pas sûr des implications dans des sous-levels):



    searchingDataArray.addObjectFromArray(json["results"])

    Note, je suppose que c'est comme ça en Swift, et je pose la question (car je n'ai pas de notions en Swift) que searchingDataArray = [] est bien un équivalent de searchingDataArray = [[NSMutableArray alloc] init]; et non pas de searchingDataArray = [[NSArray alloc] init]; auquel cas il y aurait un p'tit problème là  aussi.


  • Merci !


    c'est bien ça le problème 


     


    code exact qui fonctionne : 



    searchingDataArray.addObjectsFromArray(json["results"] as! [AnyObject])
Connectez-vous ou Inscrivez-vous pour répondre.