2017-08-31 61 views
0

我的問題是我有ViewDidLoad()上的函數getData(),當我切換到另一個視圖並返回到此視圖時,它再次加載在tableView上覆制我的數據的數據。獲取JSON函數時複製數據稱爲

var items = [Items]() 

func getData() { 
     Alamofire.request(url, method: .get).validate().responseJSON { response in 
      self.obj.helper.checkConnectivity() 

      switch response.result { 
      case .success(let value): 
       let json = JSON(value) 

       let jsonArray = json[].arrayValue 
       for json in jsonArray { 

        let item = Items.fromJson(json: json) 
        self.items.append(item) 
       } 

      case .failure(let error): 
       print(error) 
      } 
      self.tableView.reloadData() 
     } 
    } 



struct Items { 
    var id: Int 
    var name: String 

    static func fromJson(json: JSON) -> Items { 
     return Items(
      id: json["id"].intValue, 
      name: json["name"].stringValue, 
    } 
} 
+0

這取決於。你爲什麼再次打電話?你再次請求相同的數據,不是嗎?所以避免再次調用它?或者你正在尋找分頁API? – Larme

+0

@Larme我在ViewDidLoad()上調用getData(),所以我只是在ViewController上調用它。 –

+0

你爲什麼要重新加載頁面?如果它被加載,並且你導航到另一個頁面然後返回,你應該只是得到viewDidAppear - 你是否強制卸載視圖作爲導航的一部分?如果你需要卸載頁面,你應該刪除所有的數據作爲卸載的一部分 - 如果它是有效的保持表單數據,你不應該刪除表單... – Russell

回答

1

只需插入線以清除數組:

... 
      let jsonArray = json[].arrayValue 
      self.items.removeAll() 
      for json in jsonArray { 
... 

或更換

  for json in jsonArray { 
       let item = Items.fromJson(json: json) 
       self.items.append(item) 
      } 

  self.items = jsonArray.map { Items.fromJson(json: $0) } 
+0

感謝您使用「self.items = jsonArray.map {Items.fromJson(json:$ 0)}「 –