数组不保存

时间:2016-04-14 12:46:49

标签: ios swift uitableview

从其他Web服务获取JSON对象我从对象获取数据,并且我想在tableview中显示它。

class TableViewController1: UITableViewController {
    var nomProduit = ["ok"]
    var prixProduit = [""]
    var vt1 : String?
    var vt2 : String?

    var i : Int!
    var compteur1:Int!
    var resultat1:NSArray?
    var x : AnyObject?


    override func viewDidLoad() {


        super.viewDidLoad()
       // \(detectionString)
        let str:String = "http://vps43623.ovh.net/yamoinscher/api/products/6194005492077"
        let url = NSURL(string: str)!

        let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) -> Void in

            if let urlContent = data {

                do {

                    let jsonResult = try NSJSONSerialization.JSONObjectWithData(urlContent, options: NSJSONReadingOptions.MutableContainers)


                    self.resultat1 = jsonResult["meme_categorie"] as? NSArray

                    self.compteur1 = self.resultat1!.count
                    print(self.compteur1!)
                     //self.value = (compteur1 as? Int)!

                    for  self.i=0 ; self.i < self.compteur1! ; self.i = self.i+1  {
                    if let aStatus = self.resultat1![self.i] as? NSDictionary{
                        self.vt1 = aStatus["libelle_prod"]! as? String
                        self.nomProduit.append(self.vt1!)
                        self.vt2 = aStatus["prix"]! as? String
                        self.prixProduit.append(self.vt2!)
                        //print(self.nomProduit[self.i])


                    }

                    }


                } catch {

                    print("JSON serialization failed")

                }


            }


        }

        task.resume()


    }

然后我的问题是这个数组保持为零:

self.prixProduit.append(self.vt2!)

这是我的其余代码

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return 17
}


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

    let cell = tableView.dequeueReusableCellWithIdentifier("cell1", forIndexPath: indexPath) as! customCell1

     //   cell.PrixSim.text = nomProduit[indexPath.row]


    print(self.nomProduit[0])



    return cell
}

1 个答案:

答案 0 :(得分:1)

首先使用类别对象的自定义结构,它使事情变得如此简单。

TableViewController1

的开头
class TableViewController1: UITableViewController {

声明此结构

  struct Produit {
    var id : String
    var prix : String
    var title : String
  }

和数据源数组(忘记所有其他属性/变量)

var produits = [Produit]()

viewDidLoad中获取数据,填充数据源数组并在主线程上重新加载表视图。
此代码使用Swift本机集合类型

  override func viewDidLoad() {

    super.viewDidLoad()
    // \(detectionString)
    let str = "http://vps43623.ovh.net/yamoinscher/api/products/6194005492077"
    let url = NSURL(string: str)!

    let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) -> Void in

      if let urlContent = data {

        do {
          let jsonObject = try NSJSONSerialization.JSONObjectWithData(urlContent, options: [])
          if let jsonResult = jsonObject as? [String:AnyObject] {
            if let memeCategorie = jsonResult["meme_categorie"] as? [[String:String]] {
              for categorie in memeCategorie {
                if let prix = categorie["prix"], title = categorie["libelle_prod"], id = categorie["id"] {
                   self.produits.append(Produit(id: id, prix: prix, title: title))
                 }
              }
              dispatch_async(dispatch_get_main_queue()) {
                 self.tableView.reloadData()
              }
            }
          }
        } catch {
          print("JSON serialization failed", error)
        }
      } else if let connectionError = error {
          print("connection error", connectionError)
      }
    }      
    task.resume()
  }

numberOfRowsInSection中返回实际的项目数而不是硬编码的数字 您可以省略numberOfSectionsInTableView,因为默认值为1

  override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return produits.count
  }

cellForRowAtIndexPath中按索引路径获取项目并将值分配给标签(或其他)。目前,这些值只是打印出来的。

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

    let cell = tableView.dequeueReusableCellWithIdentifier("cell1", forIndexPath: indexPath) as! customCell1

    let produit = produits[indexPath.row]

    print(produit.id, produit.title, produit.prix)
    return cell
  }

}