2015-09-04 45 views
-1

我面临一个问题与我的一个tableview,我解码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