IOS(Swift)从Flickr

时间:2016-01-04 23:02:44

标签: ios json swift

您好我正在尝试从Flickr加载图像并将其显示在tableview中,我使用以下3种方法进行显示:

func createConnection(){
    let url = NSURL(string: "https://api.flickr.com/services/rest/?method=flickr.photos.getRecent&api_key=" + apiKey + "&per_page=20&format=json&nojsoncallback=1")!
    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithURL(url, completionHandler: {data, response, error in self.loadImages(data!)})
    task.resume()
}

func loadImages(data: NSData?) {
    guard data != nil else{
        print("Error")
        return
    }
    do {
        let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)
        let photos = jsonData["photos"] as! NSDictionary
        let photoList = photos["photo"] as! NSArray
        for imageData in  photoList{
            let theTitle = imageData["title"] as! String
            let farm = imageData["farm"]!
            let server = imageData["server"]!
            let secret = imageData["secret"]!
            let id = imageData["id"]!
            let imageURL = "https://farm\(farm!).staticflickr.com/\(server!)/\(id!)_\(secret!).jpg"
            let session = NSURLSession.sharedSession()
            let task = session.dataTaskWithURL(NSURL(string: imageURL)!, completionHandler: {
                data, response, error in self.addNewItem(theTitle, data: data)
            })

            task.resume()
        }


    }
    catch {
        print ("Error while loading data")
    }
}

func addNewItem(title: String, data: NSData?){
    guard data != nil else{
        print ("Error")
        return
    }
    let image = UIImage(data: data!)
    let item = Item(title: title, image: image)
    itemList.append(item)
    print (item.title)

}

我在viewDidLoad()中调用第一个方法,然后使用tableView方法,我尝试从itemList [Item]数组中获取图像和图像标题。出于测试目的,我在addNewItem()方法中使用print(item.title)方法来查看是否从json文件获取数据,并打印所有图像标题。 然而,问题是表仍然是空的,因此我想知道是不是因为我没有使用异步下载,虽然我不知道如何做到这一点,因为我是IOS和Swift的新手。 请帮忙

0 个答案:

没有答案