2015-09-04 3 views
-1

У меня возникла проблема с одним из моих табличных представлений, я расшифровал JSON и поместил результат в свои ячейки, проблема в том, что каждый раз, когда я закрываю представление и возвращаюсь к нему, предыдущие элементы все еще остаются здесь:Удалить предыдущий элемент tableview Swift

First time i enter in the view

Second time

Я думаю, что я что-то делать с ReloadData, но я не знаю, что.

Мой код:

//Retrieving JSON DATA : 

var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(urlData!, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary 
      var DataFromJSon = jsonResult["objects"] as! NSArray 
      for one in DataFromJSon { 
       let repo = Repository(jsonData: one as! [String : AnyObject]) 
       repos.append(repo) 

      } 

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

    var cell:UITableViewCell? = tableView.dequeueReusableCellWithIdentifier("Cell") as? UITableViewCell 
    if (cell != nil) 
    { 
     cell = UITableViewCell(style: UITableViewCellStyle.Subtitle,reuseIdentifier: "Cell") 
    } 
    cell!.textLabel?.text = repos[indexPath.row].title 
    cell!.detailTextLabel?.text = repos[indexPath.row].price 


    //on récupère l'url de l'image dans "Repository" et on la convertis en data exploitable 
    let urlString: NSString = repos[indexPath.row].picture_url! , 
    imgURL = NSURL(string: urlString as String) 

    if let url = NSURL(string: urlString as String) { 
     // If this image is already cached, don't re-download 
     if let img = imageCache[urlString as String] { 
      cell!.imageView?.image = img 
      cell!.imageView?.frame = CGRectMake(5,5,35,35) 
      println("image présente") 
     } 
     else { 
      // The image isn't cached, download the img data 
      // We should perform this in a background thread 
      let request: NSURLRequest = NSURLRequest(URL: imgURL!) 
      let mainQueue = NSOperationQueue.mainQueue() 
      NSURLConnection.sendAsynchronousRequest(request, queue: mainQueue, completionHandler: { (response, data, error) -> Void in 
       if error == nil { 
        // Convert the downloaded data in to a UIImage object 
        let image = UIImage(data: data) 
        // Store the image in to our cache 
        self.imageCache[urlString as String] = image 
        // Update the cell 

        dispatch_async(dispatch_get_main_queue(), { 
         if let cellToUpdate = tableView.cellForRowAtIndexPath(indexPath) { 
          cellToUpdate.imageView?.image = image 
          cellToUpdate.imageView!.frame = CGRectMake(5,5,35,35) 
          println("image reload") 
         } 
        }) 
       } 
       else { 
        println("Error: \(error.localizedDescription)") 
       } 
      }) 
     } 


    } 
    return cell! 
} 

Как я могу решить эту проблему?

Спасибо!

+0

Похоже, что вы * добавляете * недавно измененные данные вместо того, чтобы переписывать старые данные. – Michal

+0

Возможно, вам нужна часть моего кода? – f1rstsurf

+0

Это прояснит все, да. – Michal

ответ

3

Очистить предыдущие резервные копии перед добавлением новых элементов в массив.

var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(urlData!, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary 
var DataFromJSon = jsonResult["objects"] as! NSArray 

repos.removeAll() // clear old items.[Add this line of code] 

for one in DataFromJSon { 
    let repo = Repository(jsonData: one as! [String : AnyObject]) 
    repos.append(repo) 

} 
+0

Большое спасибо, он отлично работает – f1rstsurf