没有从协议

时间:2018-04-07 02:26:25

标签: ios swift xcode

我正在制作各种各样的图书馆。一个屏幕,一个表格视图控制器,包含一个书籍列表,另一个屏幕,一个视图控制器,允许您添加书籍。

我正在使用Add Book类将书籍添加到书籍列表屏幕。添加书籍屏幕包含文本输入,以允许用户输入书籍的名称,作者,出版商等。当用户在输入这些字段后单击按钮时,它会创建包含这些属性的书籍对象,并将用户定向回家屏幕显示新书已添加到书籍列表中。书籍列表是一个行表。每行分别包含一本书。

我正在使用一个协议来调用books类列表中的委托函数,但是它没有调用这个函数。未调用的函数是newBook。我的代码对我来说似乎很好,但是没有调用newBook委托函数。请帮忙!。我在下面添加了相关代码:

添加图书课程:

import UIKit
protocol AddBookProtocol {
    func newBook(book: Book)
}
class AddBookViewController: UIViewController {
    var addBookDelegate: AddBookProtocol?

    @IBOutlet weak var authorField: UITextField!
    @IBOutlet weak var genreField: UITextField!
    @IBOutlet weak var editionField: UITextField!
    @IBOutlet weak var isbnField: UITextField!
    @IBOutlet weak var nameField: UITextField!
    @IBOutlet weak var dateField: UITextField!
    @IBOutlet weak var publisherField: UITextField!
    @IBOutlet weak var descriptionField: UITextField!

    @IBAction func saveButton() {
        print("HAHHHAHAHAH")
        let name = nameField.text
        let isbn = isbnField.text
        let author = authorField.text
        let publisher = publisherField.text
        let publishDate = dateField.text
        let genre = genreField.text
        let edition = editionField.text
        let desc = descriptionField.text
        let book = Book(title: name!, isbn: isbn!, author: author!, publishDate: publishDate!, genre: genre!, publisher: publisher!, edition: edition!, desc: desc!)
        addBookDelegate?.newBook(book: book)
        navigationController?.popViewController(animated: true)

    }
 //rest of the code

班级显示当前书籍列表:

class CurrentBooksTableViewController: UITableViewController, AddBookProtocol {
     var BooksList: [Book] = []
 func newBook(book: Book) {
        BooksList.append(book)
        tableView.beginUpdates()
        tableView.insertRows(at: [IndexPath(row: BooksList.count - 1, section: 0)], with: .automatic)
        tableView.endUpdates()

        tableView.reloadSections([SECTION_COUNT], with: .automatic)
    }
 //rest of the code
}

因为某些原因没有调用newBook。

2 个答案:

答案 0 :(得分:1)

您需要将AddBookViewController的addBookDelegate设置为CurrentBooksTableViewController

在呈现AddBookViewController之前,在CurrentBooksTableViewController中,您需要将addBookDelegate设置为self。

INSTANCE_OF_ AddBookViewController.addBookDelegate = self

然后只能从另一端访问addBookDelegate函数。否则,如果你检查addBookDelegate将是= nil

答案 1 :(得分:1)

您是否设置了addBookDelegate的值?您可以在表视图控制器中准备segue函数中执行此操作。

func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let addBookVC = segue.destination as? AddBookViewController {
        addBookVC.addBookDelegate = self
    }
}