gpt4 book ai didi

ios - swift tableView 为零

转载 作者:行者123 更新时间:2023-11-30 11:05:50 26 4
gpt4 key购买 nike

因此,每次我在 addItemViewController 中向 Firebase 添加新条目时,它都会返回到 ViewController,但执行此操作时应用程序会崩溃并出现以下错误:“线程 1: fatal error :解包可选值时意外发现 nil”。错误出在 ViewController.swift 中 ViewDidLoad 和 tableView.reloadData() 的行上。任何建议将不胜感激!谢谢!

ViewController.swift

//
// ViewController.swift
// toDo
//
// Created by Jesse Brior on 10/5/18.
// Copyright © 2018 Jesse Brior. All rights reserved.
//

import UIKit
import Firebase

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var tableView: UITableView!

var ref : DatabaseReference!
var items: [itemObjectModel] = []

override func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference()
tableView.reloadData()
self.navigationItem.setHidesBackButton(true, animated: true)
self.title = "To Do's"
storeKeys()
}

func storeKeys() {
ref.child("tasks").queryOrdered(byChild: "completed").observe(.value, with: { snapshot in
var newItems: [itemObjectModel] = []
for child in snapshot.children {
if let snapshot = child as? DataSnapshot,
let newTask = itemObjectModel(snapshot: snapshot) {
newItems.append(newTask)
self.items = newItems
self.tableView.reloadData()
}
}
self.items = newItems
self.tableView.reloadData()
})
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return items.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let item = items[indexPath.row]
cell.textLabel?.text = item.name.capitalized
if item.completed {
cell.detailTextLabel?.text = "Complete"
}else{
cell.detailTextLabel?.text = "Incomplete"
}
return cell
}

}

addItemViewController.swift

//
// addItemController.swift
// toDo-v2
//
// Created by Jesse Brior on 10/9/18.
// Copyright © 2018 Jesse Brior. All rights reserved.
//

import Foundation
import UIKit
import Firebase

class addItemController: UIViewController {

var ref : DatabaseReference!
@IBOutlet weak var addItemField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
ref = Database.database().reference()
self.title = "Add Item"
}
@IBAction func addItemPressed(_ sender: Any) {
if addItemField.text != "" {
let task = addItemField.text!
let completion = false

let newItem = itemObjectModel(name: task, completed: completion)

let newItemRef = self.ref.child("tasks").child(task.lowercased())
newItemRef.setValue(newItem.toAnyObject())
}
self.present(ViewController(), animated: true, completion: nil)
}
}

崩溃日志图片链接:/image/ZGC4k.png

最佳答案

您的错误在这一行:

self.present(ViewController(), animated: true, completion: nil)

这并不像你把它“segue回”到你的ViewController类,而是创建它的一个新实例并呈现它。另外,因为它只是创建基本类的新实例,而它可能应该从 Storyboard/xib 文件实例化它,因此它不会设置任何 IBOutlet,只是创建普通的空类。这就是为什么你会收到 tableview is nil, Nothing is set up 的错误。

您没有展示如何呈现 addItemController,因为这将指示用于返回原始 ViewController 的正确方法。

稍微独立一点的是,您应该在 Swift 中使用正确的类名和变量名格式。所以 addItemController 是一个类,因此应该被称为 AddItemController 并且在 ViewControllertableview 实际上应该是 tableView.

关于ios - swift tableView 为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52746559/

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