IOS(Swift)从Flickr加载图像

IOS(Swift)从Flickr加载图像,ios,json,swift,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&nojsoncallba

您好,我正在尝试从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新手。
请帮助

是否正在刷新表视图以让其了解新数据
reloadData()
是方法。每当您的数据源发生更改时,您都会调用此方法以使其自行刷新。不,我不是,我将在何处添加此方法?抱歉,我是ios的新手,可能在您的
addNewItem()
末尾。我不确定这是否是您想要的结构,但我不建议在
项中保留对
UImage
的引用。相反,只需将URL和标题保留在
项中
并在需要时将
UIImage
加载到
UIImageView
中。此外,使用一些缓存机制,有一些
UIImageView+缓存+加载服务器映像
的开源实现,您可能希望看看这些实现,我强烈建议您下载图像并进行缓存。是否正在刷新表视图以让其了解新数据
reloadData()
是方法。每当您的数据源发生更改时,您都会调用此方法以使其自行刷新。不,我不是,我将在何处添加此方法?抱歉,我是ios的新手,可能在您的
addNewItem()
末尾。我不确定这是否是您想要的结构,但我不建议在
项中保留对
UImage
的引用。相反,只需将URL和标题保留在
项中
并在需要时将
UIImage
加载到
UIImageView
中。此外,使用一些缓存机制,有一些
UIImageView+缓存+加载服务器映像
的开源实现,您可能希望看看这些实现,我强烈建议您下载和缓存图像。