解析JSON以在CollectionViewCell Swift 2中显示

时间:2016-09-07 11:27:40

标签: json dictionary swift2

我只是刚刚开始创建一个工作应用程序来补充我的工作网站,但我在解析我们用来填补我们没有工作的任何地方的空间的确实API时遇到了问题。我可以获得内容,但我似乎无法将其存储到字典中,然后用于创建集合视图的单元格。我的视图控制器代码如下所示,任何建议都得到了赞赏,因为在无数的教程和网页搜索之后......我想我完全破坏了它:

    import UIKit

    class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {

@IBOutlet weak var myCollectionView: UICollectionView!


var jobtitle = [[String: String]]()


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    loadJobs()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    print(jobtitle.count)
    return jobtitle.count
}

// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    //MyCollectionViewCell

    let myCell: MyCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("myCell", forIndexPath: indexPath) as! MyCollectionViewCell

    let jobTitleString = self.jobtitle[indexPath.row] as? [String:String]
    let trueJobTitle = jobTitleString!["jobtitle"] // as! String

    myCell.jobTitleLabel.textColor = UIColor.whiteColor()
    myCell.jobTitleLabel.text = trueJobTitle

    return myCell

}

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

    print("User tapped on: \(indexPath.row)")
}



func loadJobs() {

    let startTime = NSDate.timeIntervalSinceReferenceDate()

    var pageUrl = "http://api.indeed.com/ads/apisearch?publisher=8134512135661512&format=json&q=java&l=austin%2C+tx&sort=date&radius=25&st=&jt=&start=&limit=10&fromage=&filter=&latlong=1&co=us&chnl=&userip=1.2.3.4&useragent=Mozilla/%2F4.0%28Firefox%29&v=2"
    let myUrl=NSURL(string: pageUrl)
    let request = NSMutableURLRequest(URL:myUrl!)

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
        data, response, error in

        // If error display alert message

        if error != nil {
            var myAlert = UIAlertController(title: "Alert", message: error?.localizedDescription, preferredStyle: UIAlertControllerStyle.Alert)

            let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default
                , handler: nil)

            myAlert.addAction(okAction)

            self.presentViewController(myAlert, animated: true, completion: nil )
            return
        }

        do {
            let jsonArray = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as? NSArray

            if let parseJSONArray = jsonArray
            {
                self.jobtitle = parseJSONArray as! [[String:String]]

                dispatch_async(dispatch_get_main_queue(), {self.myCollectionView.reloadData()});

            }
        } catch {
            print("error: \(error)")
        }

        print(self.jobtitle)

    }

    task.resume()



}

}

1 个答案:

答案 0 :(得分:0)

一个简单的问题:看看你的代码,我不清楚你是否为集合视图设置了一个UICollectionViewLayout对象。布局管理器是UICollectionView的任何实现中的关键元素 - 首次加载集合视图时,您需要创建布局管理器,传递参数,例如节/行数和所需的单元格宽度/高度等。布局管理器然后构建您的布局 - 只有在发生这种情况之后才会调用cellForItemAtIndexPath方法来实际开始填充集合视图。如果您没有使用布局初始化布局管理器,则collectionViewController不会认为集合视图中有任何单元格!

Apple提供了一个内置的默认布局管理器,称为流布局,但构建自己的布局管理器也相当容易。基本上(并且我在这里缺少一些重要的东西)你正在创建一个为你的单元格构建一个框架数组的类,所以它并不复杂。

无论如何,让我知道你是否实际上已经实现了布局管理器,我们可以从那里接受它。