2017-10-13 35 views
-2

我有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

回答

0

根據你的描述,你有一個從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

1

您試圖在錯誤的地方設置委託。 根據有關準備方法的文檔:

此方法的默認實現什麼也不做。子類 將覆蓋此方法,並在顯示之前使用它來配置新視圖控制器 。 segue對象包含關於轉換的信息 ,包括對涉及的兩個視圖控制器 的引用。

你要實現此方法:

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