Swift解析json,并向用户显示问题
我自己解析一个JSON,在看了两个教程之后,我尝试修改一个OMBD API,但是Xcode给我抛出了一个错误线程1:EXC_BAD_ACCESS code=2,address=0x7ffee7ca9f68,我如何调试它,下面是我到目前为止所做的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 =
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
}
}