gpt4 book ai didi

arrays - (自己回答)Swift 数组在函数 numberofRows 中返回 0 个计数(在 tableView 中,但在其他任何地方它返回正确数量的 array.count

转载 作者:行者123 更新时间:2023-11-28 15:31:06 25 4
gpt4 key购买 nike

我有一个从互联网加载 JSON 文件并将其存储在数组和字典中的项目。当我在 viewDitload 或 viewDidDisappear 中打印 Array 或 Dict 的计数时,我在 JSON 文件中得到的正确计数是 50。但是在对 tableViewDataSource 的 numberOfRows 和 objectForValue 调用中,它返回 0 作为计数。我忽略了一些东西但是在打开和关闭窗口时数组中有信息但是当 tableView 以某种方式重新加载时数组是空的。这是我的代码,非常感谢任何帮助

import Cocoa

class ViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate {

var coursesDict = [String: Course]()
var coursesArray = [Course]()

@IBAction func refreshTable(_ sender: Any) {
table.reloadData()
}
@IBOutlet weak var table: NSTableView!

func numberOfSectionsInTableView(tableView: NSTableView) -> Int {
return 1
}

func numberOfRows(in tableView: NSTableView) -> Int {

let numOfRows = coursesArray.count
print(numOfRows)

return numOfRows

}

func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
return coursesArray[row]
}

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.
if let data = UserDefaults.standard.data(forKey: "courses"),
let savedCourses = NSKeyedUnarchiver.unarchiveObject(with: data) as? [String: Course] {
self.coursesDict = savedCourses
loadDataFromURL()

self.coursesArray = Array(coursesDict.values)
print(coursesDict.count, " appLaunch")
} else {
print("There is an issue")
}
}

override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}

override func viewDidDisappear() {
let encodedData = NSKeyedArchiver.archivedData(withRootObject: coursesDict)
UserDefaults.standard.set(encodedData, forKey: "courses")
print(coursesDict.count, "viewUnload")
}

func loadDataFromURL() {
// Fetch URL
let url = URL(string: "https://www.apple.com/nl/today/static/data/hub/1101000001001110001.json")!

// Load Data
let data = try! Data(contentsOf: url)

// Deserialize JSON
let json = try! JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [String: AnyObject]

let coursesJSON = json?["courses"] as? [AnyObject]

for object in coursesJSON! {
let id = object["id"] as! String
if coursesDict[id] == nil {
let name = object["shortName"] as! String
let program = object["programName"] as! String
let shortDescription = object["shortDesc"] as! String
let mediumDescription = object["mediumDesc"] as! String
let longDescription = object["longDesc"] as! String
let imageURL = object["image"] as! String

let tempCourse = Course(id: id, name: name, program: program, shortDescription: shortDescription, mediumDescription: mediumDescription, longDescription: longDescription, imageURL: imageURL)

coursesDict[id] = tempCourse
}
}
print(coursesDict.count, "loadURL")
}

}

我的 View 上什至有一个按钮可以重新加载 tableView,以防在 tableView 自动重新加载之前未加载信息

最佳答案

问题不在于我的代码。问题在于我的 Xib 中有两个 viewController 实例,所以当我将内容硬编码到数组中时它正在工作,因为两个实例都会有该信息但是来自第二个 viewcontroller 的 viewDidload 从未被调用,因为它是未连接到任何 View

关于arrays - (自己回答)Swift 数组在函数 numberofRows 中返回 0 个计数(在 tableView 中,但在其他任何地方它返回正确数量的 array.count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44731674/

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