Ios 为什么我无法在swift中下载所有json值?
我有后端api,它包含我在postman中看到的所有值。。但在解析时,我无法从api下载所有值。。有时我会得到所有的价值观。。有时候,我得到的不仅仅是一些价值观。。如果我关闭应用程序并再次运行,那么我将获得所有值。。同样,如果我关闭并运行,或者如果我转到其他viewcontroller并返回主页,那么我会丢失一些值。如果我打印Ios 为什么我无法在swift中下载所有json值?,ios,json,swift,rest,uicollectionview,Ios,Json,Swift,Rest,Uicollectionview,我有后端api,它包含我在postman中看到的所有值。。但在解析时,我无法从api下载所有值。。有时我会得到所有的价值观。。有时候,我得到的不仅仅是一些价值观。。如果我关闭应用程序并再次运行,那么我将获得所有值。。同样,如果我关闭并运行,或者如果我转到其他viewcontroller并返回主页,那么我会丢失一些值。如果我打印jsonObj我不会从api获取所有值。。为什么会这样 这是我的密码: import UIKit import SDWebImage struct JsonData { v
jsonObj
我不会从api获取所有值。。为什么会这样
这是我的密码:
import UIKit
import SDWebImage
struct JsonData {
var iconHome: String?
var typeName: String?
var id: String?
init(icon: String, tpe: String, id: String) {
self.iconHome = icon
self.typeName = tpe
self.id = id
}
}
class HomeViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UITextFieldDelegate {
@IBOutlet weak var collectionView: UICollectionView!
var itemsArray = [JsonData]()
override func viewDidLoad() {
super.viewDidLoad()
homeServiceCall()
//Do any additional setup after loading the view.
collectionView.delegate = self
collectionView.dataSource = self
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return itemsArray.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! HomeCollectionViewCell
let aData = itemsArray[indexPath.row]
cell.paymentLabel.text = aData.typeName
cell.paymentImage.sd_setImage(with: URL(string:aData.iconHome ?? ""), placeholderImage: UIImage(named: "varun finance5_icon"))
return cell
}
//MARK:- Service-call
func homeServiceCall(){
let urlStr = "https://dev.com/webservices//getfinancer"
let url = URL(string: urlStr)
URLSession.shared.dataTask(with: url!, completionHandler: {(data, response, error) in
guard let respData = data else {
return
}
guard error == nil else {
print("error")
return
}
do{
let jsonObj = try JSONSerialization.jsonObject(with: respData, options: .allowFragments) as! [String: Any]
print("the home json is \(jsonObj)")
let financerArray = jsonObj["financer"] as! [[String: Any]]
for financer in financerArray {
guard let id = financer["id"] as? String else { break }
guard let pic = financer["icon"] as? String else { break }
guard let typeName = financer["tpe"] as? String else { break } //changed this one to optional too. Avoid force-unwrapping. Keep everything safe
let jsonDataObj = JsonData(icon: pic, tpe: typeName, id: id)
self.itemsArray.append(jsonDataObj)
}
DispatchQueue.main.async {
self.collectionView.reloadData()
}
}
catch {
print("catch error")
}
}).resume()
}
}
请帮我输入上面的代码。尝试使用后台线程进行网络呼叫
DispatchQueue.global(qos: DispatchQoS.QoSClass.background).async {
self.homeServiceCall()
}
而且URL
合法,双/
如下
let urlStr = "https://dev.com/webservices//getfinancer"
并检查所有后端数据是否与JSONSerialization类型的JsonData
struct兼容
我希望它能有所帮助。在我的json中,我有一个nil图像,我没有得到剩余的图像。。我现在已经检查了为什么?我没有在我上面的帖子中发布原始url。。实际上,我正在获取从url到jsonok的所有值,您能分享一个json示例吗?哪些部分正在工作?不,我正在获取json中的所有值。。但我只能在collectionview中显示前15个值,在16个值中我没有显示任何值,因此我无法在collectionview中显示任何值