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 无缘无故停止了他的工作的主要内容,如果未能解决你的问题,请参考以下文章

频道应用程序无故停止工作 unitil ASGI 服务器重新启动

PHP-cgi 随机停止工作而没有错误日志

unity coroutine 无故停止

Excel VBA 停止而没有错误消息

Xdebug 停止工作并且无法在断点处停止

QWidget paintEvent 无故停止调用