swift - tableView发现零时,展开

问题描述:

我有2 UIViewControllerMainViewController - >CreateNewViewControllerswift - tableView发现零时,展开

tableView包含在MainViewController中。我已将tableViewdataSourcedelegate连接到MainViewController。我还将一个插座连接到MainViewController。在MainViewController

override func viewDidLoad() { 
    super.viewDidLoad() 

    _ = MainViewController.init(nibName: nil, bundle: nil, createNewViewController: self) 

    // Do any additional setup after loading the view. 
} 

初始化将初始化委托财产:

CreateNewViewController,我想有这样的

init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?, createNewViewController : CreateNewViewController) { 
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
    createNewViewController.createNewCallBack = self 
} 

我试图更新tableView与协议FUNC。我不明白为什么tableViewCreateNewViewController回来时会是nil。这是回调函数:

func addNewBook(book: Book) { 
    self.books.append(book) 
    self.tableView.reloadData() 
} 

任何帮助将不胜感激!

+0

您使用的是故事板? – Sweeper

+0

是的,我用故事板为 – Jeff

+0

我正在使用segue从主要CreateNew – Jeff

根据你的描述,你有一个从MainVC到CreateNewVC的继续。

在CreateNewVC的viewDidLoad中,您似乎试图将CreateNewVC的委托设置为MainVC。但是,这不是正确的方法。

你应该这样做之前提出CreateNewVC,在MainVC的prepareForSegue方法。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let vc = segue.destination as? CreateNewViewController { 
     vc.createNewCallback = self 
    } 
} 
+0

谢谢!我对swift很陌生,你的回答肯定会帮助我在将来使用prepare segue初始化财产 – Jeff

您试图在错误的地方设置委托。 根据有关准备方法的文档:

此方法的默认实现什么也不做。子类 将覆盖此方法,并在显示之前使用它来配置新视图控制器 。 segue对象包含关于转换的信息 ,包括对涉及的两个视图控制器 的引用。

你要实现此方法:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let myViewController = segue.destination as? CreateNewViewController { 
     myViewController.createNewCallback = self //this set the delegate 
    } 
}