UISearchController
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.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
99,9% de chances de mettre un NSArray (json["results"]) dans searchingDataArray même s'il est défini comme mutable (NSMutableArray)
Du coup:
ça ne marche pas, NSArray n'a pas removeAllObjects().
Possibilité (pas sûr des implications dans des sous-levels):
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 :