2013-08-27 49 views
0

經過一些工作應用程序的「清理」之後,主窗口按照MainWindow.xib中的設計出現。什麼是導致編譯錯誤:非法的NSTableView數據源?

  • 我刪除了IB中的MainWindowViewController對象。 (是字體管理之下)
  • MainWindow.xib中有它的自定義類設置爲MainWindowViewController
  • 該表使用內容模式 - 查看基於
  • 兩個必需的方法包括在實現文件
  • 包含頭文件
  • 表視圖連接已經取得了File's Owner

編輯:是否完整的錯誤消息提供線索?爲什麼NSApplication?

*** Illegal NSTableView data source (<NSApplication: 0x100607ad0>). 

我在想什麼?我應該檢查什麼來解決?

包含的圖像有助於可視化。

Screenshot of MainWindow.xib

編輯2:(新信息)

我刪除從表視圖data source & delegate連接和錯誤消失。相同的IB設計窗口以空表視圖打開。

+0

不要讓應用程序成爲tableView的數據源,那就是糟糕的表單,它會使得以後很難展開,創建一個特殊的類(或者你已經擁有的東西將始終與表格爲1:1的關係,或者表格數據),並使其採用適當的數據源協議。 –

+0

您是否還在.h文件中聲明NSTableView DataSource協議,該文件既是文件的所有者,又是實現DataSource方法的類? – uchuugaka

+0

@uchuugaka是的。謝謝。我忘了在描述中加入。 – David

回答

0

我的'項目'比文檔涵蓋的更復雜。如何添加窗口控制器到Cocoa/Core Data模板並使用這個控制器是不容易找到的。

最明顯的症狀是目標控制器中的代碼未被執行。所需的兩種代表方法都存在。 awakeFromNib也沒有被調用。

更多的研究後,出現「缺失的一環」是(以前刪除)NSObject設置在筆尖文件中的自定義類的MainWindowViewControllerMainWindowController。我仍然在尋找爲什麼需要這樣做,或者爲什麼連接到文件的所有者沒有建立連接。一方面,我們可以將文件所有者設置爲自定義類(MainWindow)ViewController或(Main)WindowController,並將包含的視圖連接到文件所有者。這不符合我的預期。另一方面,(顯然是正確的),我們可以在MainMenu.xib文件中添加一個NSObject,將它的自定義類設置爲(MainWindow)ViewController或(Main)WindowController,然後將出口連接到此對象的子視圖。在IB中添加此對象的步驟是我能夠找到將窗口連接到控制器的唯一方法。

相關問題