IOS(Swift)从Flickr加载图像
您好,我正在尝试从Flickr加载图像并在tableview中显示它们,我使用以下3种方法执行此操作: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
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+缓存+加载服务器映像
的开源实现,您可能希望看看这些实现,我强烈建议您下载和缓存图像。