gpt4 book ai didi

swift - 向 NSTableView 添加数据时崩溃

转载 作者:行者123 更新时间:2023-11-30 10:35:17 24 4
gpt4 key购买 nike

我正在尝试使用 NSArrayController 将数据从使用类构建的数组添加到 NSScrollView

这是类和数组:

class Serie: NSObject {
@objc dynamic var theID: String
@objc dynamic var serieName: String
@objc dynamic var serieAired: String
@objc dynamic var serieNetwork: String
@objc dynamic var serieStatus: String

init(theID: String, serieName: String, serieAired: String, serieNetwork: String, serieStatus: String ) {
self.theID = theID
self.serieName = serieName
self.serieAired = serieAired
self.serieNetwork = serieNetwork
self.serieStatus = serieStatus
}
}

@objc dynamic var Series: [Serie] = []

接下来,我将 NSArrayController 绑定(bind)到类“Series”的数组,并将 TableViewCell 链接到每个类项。

TableView tree image
Bindings & Outlets of ArrayController image
Bindings & Outlets of TableViewCell image

下一个函数是我填充“动态变量系列”的地方,它将内容绑定(bind)到 NSArrayController 并填充 NSScrollView:

func GetSerieID(theSerieName: String){

let url = URL(string: ("https://api.thetvdb.com/search/series?name=" + theSerieName ))!

var request = URLRequest(url: url)
request.httpMethod = "GET"

request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
request.setValue( "Bearer \(token)", forHTTPHeaderField: "Authorization")
//request.setValue( "en", forHTTPHeaderField: "Accept-Language")

let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else {
print(error?.localizedDescription ?? "No data")
return
}

let json = try? JSON(data: data) // >> I use SwiftyJSON to manage JSON
let theJSONContent = json!["data"]

self.Series = [] // >> Empty the array Series

for (_,subJson):(String, JSON) in theJSONContent {

let serie = Serie(
theID: subJson["id"].stringValue,
serieName: subJson["seriesName"].stringValue,
serieAired: subJson["firstAired"].stringValue,
serieNetwork: subJson["network"].stringValue,
serieStatus: subJson["status"].stringValue
)

self.Series.append(serie) // >> Here is where it crashes
}
}
task.resume()

serieTabla.reloadData()
}

有时,TableView 无法正确显示或更新 View ,并加载空白数据,如果单击它,显示几秒钟,但通常它会工作,直到加载超过 10 个结果。 这是一个大问题。

它是随机发生的,但通常当您超过 10-20 个项目时。

Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

崩溃日志:

miVideoGestor[82269:13639248] *** Assertion failure in -[NSTableRowData _addRowViewForVisibleRow:withPriorView:]


我无法找出解决方案。

有人可以告诉我如何解决tableView上数据加载和显示的问题吗?

提前谢谢大家

最佳答案

当您使用基于键值观察的 Cocoa Bindings 时,您必须将影响 UI 的任何行放入 DispatchQueue.main block 中

DispatchQueue.main.async {
self.Series = []

for (_,subJson):(String, JSON) in theJSONContent {

let serie = Serie(
theID: subJson["id"].stringValue,
serieName: subJson["seriesName"].stringValue,
serieAired: subJson["firstAired"].stringValue,
serieNetwork: subJson["network"].stringValue,
serieStatus: subJson["status"].stringValue
)

self.Series.append(serie)
}
self.serieTabla.reloadData()
}

关于swift - 向 NSTableView 添加数据时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58183849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com