我正在Swift学习商业应用课程,但我在运行代码时遇到了问题。我想我已经有了所有正确的代码来运行它。我有一个JSON文件,我必须导入到应用程序并将数据从json文件推送到tableView。 “func tableView”中出现了一些问题,但我无法弄明白。任何帮助表示赞赏:)
I added a screenshot of my code, as well as the main.storyboard
import UIKit
struct Movie : Decodable {
let MOVIENAME : String
let DIRECTORNAME : String
}
class ViewController: UIViewController, UITableViewDataSource,
UITableViewDelegate {
//indicates this is an array of the structure 'Movie'
var movies = [Movie]()
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return movies.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) ->
UITableViewCell {
let myCell = movieTableView.dequeueReusableCell(withIdentifier:
"movieTable")
myCell?.textLabel?.text = movies[indexPath.row].MOVIENAME
myCell?.detailTextLabel?.text = movies[indexPath.row].DIRECTORNAME
return myCell!
}
@IBOutlet weak var movieTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// construct path to the file, this tells the system the name of the file and the file type JSON
let path = Bundle.main.path(forResource: "movies", ofType: "json")
let url = URL(fileURLWithPath: path!) //creating url of the file, add "!" to unwrap the path
do {
//'try" is a security measure that basically says, if we dont get successfully create data through the url
let data = try Data(contentsOf: url)
self.movies = try JSONDecoder().decode([Movie].self, from: data)
for eachMovie in self.movies {
print(eachMovie.MOVIENAME)
}
} catch {
print("JSON Error.")
}
movieTableView.delegate = self
movieTableView.dataSource = self
}
}
答案 0 :(得分:0)
第1点
从代码和屏幕截图看,你看起来已经设置了不同于代码中使用的单元格标识符(猜猜!!)。因此,单元格返回nil,应用程序将崩溃。
let myCell = movieTableView.dequeueReusableCell(withIdentifier:
"movieTable")
因此,请确保故事板中的单元格标识符为movieTable
,如代码中所示。
第2点
第二点是您在代码textLabel
和detailTextLabel
中使用了单元格的默认标签。在故事板中,它显示您已设置自定义标签。哪些无处可用。因此,根据您的代码,故事板中的标签未被使用。因此,删除该表并将单元格样式设置为SubTitle
以在代码下方使用。
myCell?.textLabel?.text = movies[indexPath.row].MOVIENAME
myCell?.detailTextLabel?.text = movies[indexPath.row].DIRECTORNAME
第3点
如果要以自定义方式在单元格中使用标签,可以创建自定义类的tableview单元格。 To make custom UITableViewCell
答案 1 :(得分:0)
您是否使用 UITableViewCell 标识符注册了 UITableView ?在viewDidLoad()
上,输入并尝试
YOUR_TABLE_VIEW.register(UITableViewCell.classForCoder(), forCellReuseIdentifier: "movieTable")
正如@technerd所说,确保故事板中的单元格标识符是movieTable,就像在代码中一样。
希望这有帮助。
答案 2 :(得分:0)
1> 您需要检查您的小区标识符。在故事板中设置得当吗? 2> 我认为你必须在填写“[电影]”后重新加载你的桌面视图。