Swift解析json,并向用户显示问题

Swift解析json,并向用户显示问题,json,swift,Json,Swift,我自己解析一个JSON,在看了两个教程之后,我尝试修改一个OMBD API,但是Xcode给我抛出了一个错误线程1:EXC_BAD_ACCESS code=2,address=0x7ffee7ca9f68,我如何调试它,下面是我到目前为止所做的 import UIKit import SnapKit class ViewController: UIViewController, MovieManagerDelegate { lazy var titleLabel: UILabel =

我自己解析一个JSON,在看了两个教程之后,我尝试修改一个OMBD API,但是Xcode给我抛出了一个错误线程1:EXC_BAD_ACCESS code=2,address=0x7ffee7ca9f68,我如何调试它,下面是我到目前为止所做的

import UIKit
import SnapKit

class ViewController: UIViewController, MovieManagerDelegate {

    lazy var titleLabel: UILabel = {
        UILabel()
    }()

    var movieManager = MovieManager()

    override func viewDidLoad() {
        super.viewDidLoad()

        movieManager.delegate = self

        movieManager.performMovieRequest(urlRequest: movieManager.movieUrl)
        viewHierarchy()
        constraitsMaker()
        additionalComponents()
    }

    func viewHierarchy() {
        view.addSubview(titleLabel)
    }

    func constraitsMaker() {
        titleLabel.snp.makeConstraints { (maker) in
            maker.center.leading.trailing.equalToSuperview()
        }
    }

    func additionalComponents() {
        titleLabel.textColor = .black
    }

    func didUpdateTitle(movie: MovieModel) {
        DispatchQueue.main.async {
            self.titleLabel.text = movie.movieTitle
        }
    }

}

MovieManager在下载数据时进行异步调用,这意味着在下载数据和初始化标签之前执行对performMovieRequest的调用之后的代码。将viewDidLoad中的调用移动到委托方法应该可以正常工作

func didUpdateTitle(movie: MovieModel) {
    viewHierarchy()
    constraitsMaker()
    additionalComponents()

    DispatchQueue.main.async {
        self.titleLabel.text = movie.movieTitle
    }
}

如果在此之后调用委托方法,则可能需要一个布尔属性来验证viewDidLoad中的3个方法不会再次被调用

在哪一行它会崩溃?如果parseJSON中发生错误,它会可靠地崩溃。不要强行展开。并读取错误消息。它告诉你哪里出了问题。你试图解析的JSON格式是什么?在lazy var标题标签上崩溃JSON在电影管理器的URL上,我也尝试在mvc上做
import Foundation

struct MovieData: Codable {
    let Title: String
    let Year: String
    let Rated: String
    let Writer: String
    let Released: String
    let Runtime: String
    let Genre: String
    let Director: String
    let Actors: String
    let Plot: String
    let Language: String
    let Country: String
    let Awards: String
    let Poster: URL
    let Ratings: [Ratings]
    let Metascore: String
    let `Type`: String
    let DVD: String
    let BoxOffice: String
    let Production: String
}

struct Ratings: Codable {
    let Source: String
    let Value: String


}
import Foundation
struct MovieModel {
    let movieTitle: String
}
func didUpdateTitle(movie: MovieModel) {
    viewHierarchy()
    constraitsMaker()
    additionalComponents()

    DispatchQueue.main.async {
        self.titleLabel.text = movie.movieTitle
    }
}