将JSON图像数据存储在数组中并使用Swift在tableViewCell中显示它

时间:2016-09-17 09:27:40

标签: json swift xcode swift2

我正在尝试将JSON中的图像存储在数组中,并使用TableViewController将其显示在TableViewCell中。但是阵列不仅存储图像,还存储图像的质量/大小,即{53,53}。我不知道如何从中获取图像。 我的表视图控制器名称'gameImage'中有一个UIImage。

import UIKit

class ViewController: UITableViewController {

  var NumberOfRows = 5
  var arrayOfImages = [UIImage]()
  let ImageData=NSData()
  override func viewDidLoad() {

    super.viewDidLoad()
       let url = NSURL(string:"https://itunes.apple.com/us/rss/topgrossingipadapplications/limit=25/json")

    let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
    let task  = session.dataTaskWithRequest(NSURLRequest(URL: url!)) {(data,response,error) -> Void in


            let swiftyJSON  = JSON(data: data!)

        for i in 1...6{
            var theEntryArray = swiftyJSON["feed"]["entry"][i-1]["im:image"].arrayValue
            let imageArray = theEntryArray[0]["label"].string!
            let ImageUrl = NSURL(string: imageArray)

            let ImageData = NSData(contentsOfURL: ImageUrl!)

            self.arrayOfImages.append(UIImage(data:ImageData!)!)



        }

    }

    task.resume()
    // Do any additional setup after loading the view, typically from a nib.




}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}

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

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! TableViewCell


    let pho=arrayOfImages[indexPath.row]
    cell.gameImage.image = pho

    return cell
}


}

arrayOfImages的输出如下所示:

 [<UIImage: 0x7ff893f8c990>, {53, 53}, <UIImage: 0x7ff893f62830>, {53, 53}, <UIImage: 0x7ff893c599c0>, {53, 53}, <UIImage: 0x7ff893f95740>, {53, 53}, <UIImage: 0x7ff893c5c900>, {53, 53}, <UIImage: 0x7ff893e3fee0>, {53, 53}]   

enter link description here

1 个答案:

答案 0 :(得分:1)

崩溃是因为您的图片数组可能为空或不包含20个对象,在numberOfRowsInSection您要返回20,要使用imageArray来解决此问题,您需要返回{{1}的计数像这样。

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

注意:这只是建议而不是使用NSData下载图像尝试使用SDWebImage等第三方库,这将为您带来更多好处。