FetchJson 无缘无故停止了他的工作
Posted
技术标签:
【中文标题】FetchJson 无缘无故停止了他的工作【英文标题】:FetchJson stopped he’s work for no reason 【发布时间】:2019-05-07 09:22:51 【问题描述】:我正在从新闻 API 获取数据。一切都工作了 40 多次,然后发生了一些事情,但没有任何工作。第二天打开mac后,它工作了几次,现在又不行了,我不知道这是为什么。请帮忙,代码如下:
我尝试重新安装 Xcode,管理一些 plist,重写项目。
struct Model: Codable
let articles: [News]
struct Source: Codable
var name: String?
var id: String?
struct News: Codable
var title: String?
var url: String
var description: String
var urlToImage: URL?
var source: Source
var publishedAt: String?
var author: String?
var content: String?
class myData
static func getData(completion: @escaping ([News]) -> ())
DispatchQueue.global(qos: .userInteractive).async
var finalData = [News]()
let jsonUrlString = "https://newsapi.org/v2/top-headlines?country=ua&apiKey=0cff1368c1d1445d9a0bccb6063a5220"
if let url = URL(string: jsonUrlString)
if let data = try? Data(contentsOf: url)
let decoder = JSONDecoder()
if let jsonPetitions = try? decoder.decode(Model.self, from: data)
finalData = jsonPetitions.articles
DispatchQueue.main.async
completion(finalData)
我的代码正在重新加载 tableView 并且每次它都是空的。它应该看起来像简单的 json。
【问题讨论】:
永远不要将Data(contentsOf:)
用于远程资源。使用URLSession
下载数据,然后您将能够查看和处理可能出现的任何错误。
它没有帮助我尝试使用 urlSessions 的代码,但它甚至没有去 cathc 所以我只收到一个空数组
不要只查看捕获的错误,还要检查 URLSessionTask 闭包中的错误参数。
定义停止工作:finalData
为空?有2个试试没抓到?有日志吗?
尝试使用try Data(contentsOf: url)
而不是try? Data(contentsOf: url)
来推断catch块中的错误。
【参考方案1】:
您有一个解码错误。如果您发现解码错误,它将很容易推断。对于您的回复中的新闻来源之一,description
属性为空。就让它Optional
。
试试这个:
struct Model: Codable
let articles: [News]
struct Source: Codable
var name: String?
var id: String?
struct News: Codable
var title: String?
var url: String
var description: String?
var urlToImage: String?
var source: Source
var publishedAt: String?
var author: String?
var content: String?
class MyData
static func getData(completion: @escaping ([News]) -> ())
DispatchQueue.global(qos: .userInteractive).async
var finalData = [News]()
let jsonUrlString = "https://newsapi.org/v2/top-headlines?country=ua&apiKey=0cff1368c1d1445d9a0bccb6063a5220"
if let url = URL(string: jsonUrlString)
do
let data = try? Data(contentsOf: url)
let decoder = JSONDecoder()
let jsonPetitions = try decoder.decode(Model.self, from: data!)
finalData = jsonPetitions.articles
catch
print(error)
DispatchQueue.main.async
completion(finalData)
MyData.getData (news) in
print(news)
【讨论】:
以上是关于FetchJson 无缘无故停止了他的工作的主要内容,如果未能解决你的问题,请参考以下文章