swift tableView - ноль - PullRequest
       3

swift tableView - ноль

0 голосов
/ 10 октября 2018

Поэтому каждый раз, когда я добавляю новую запись в Firebase в addItemViewController, она переходит обратно к ViewController, но при этом приложение вылетает и с этой ошибкой: " Поток 1. Неустранимая ошибка: неожиданно обнаружен ноль при развертывании Необязательногозначение ».Ошибка находится на линии в 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)
    }
}

ссылка на изображение журнала сбоя: https://i.stack.imgur.com/ZGC4k.png

1 Ответ

0 голосов
/ 11 октября 2018

Ваша ошибка в этой строке:

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

Это не так, как вы говорите, 'segue back' вам ViewController класс, но он создает новый экземпляр этого и представляет его.Кроме того, поскольку он создает новый экземпляр только базового класса, когда он, вероятно, должен создавать его экземпляр из файла раскадровки / xib, и, следовательно, он не устанавливает ни один из IBOutlets, просто создает простой пустой класс.Вот почему вы получаете сообщение об ошибке, что tableview равно нулю, ничего не настроено.

Вы не показываете, как вы представляете addItemController, поскольку это будет диктовать правильный метод для использования для возвратавернемся к исходному ViewController.

В немного отдельном примечании вы должны действительно использовать правильный формат для имен классов и переменных в Swift.Таким образом, addItemController является классом и поэтому должен называться AddItemController, а в ViewController tableview действительно должен быть tableView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...