2009-10-07 86 views
4

我試圖按照Table View Programming Guide for iPhone OS,但無法創建一個新的表視圖控制器,從nib文件加載它的數據。創建一個表視圖控制器的筆尖文件

具體來說,我試圖按照this part步驟:

如果你願意來加載從筆尖文件通過自定義表視圖管理 控制器表視圖 ,你必須 做如下:

  1. 在Interface Builder中,創建一個空的Cocoa Touch nib文件(文件> 新建)。
  2. 將UITableViewController對象從Interface Builder 庫拖到nib文檔窗口中。
  3. 將nib文件保存在您的項目目錄下,名稱爲 ,並在出現提示時選擇您的 項目以將nib文件添加到 它。
  4. 在筆尖文檔窗口中選擇Table View Controller,然後打開檢查器的Identity窗格。將 設置爲您的自定義表格視圖 控制器類。
  5. 在筆尖文檔窗口中選擇文件所有者,並將其類別 標識設置爲自定義表格視圖 控制器類。
  6. 在Interface Builder中自定義表格視圖。
  7. 選擇筆尖文檔窗口表視圖控制器,打開檢查的 屬性面板,並 輸入(或選擇)在筆尖名稱字段筆尖 文件的名稱。

因此,我創建在Xcode中新的UITableViewController子類(稱爲「MyTableViewController」),然後我進入IB和遵循這些步驟。我確保將所有屬性鏈接到與我在Xcode中製作的UITableViewController子類相同的名稱,就像它在步驟中所述。

但現在我得到以下警告在IB:

「我的表視圖控制器」既有 「查看」和「筆尖名稱」屬性中設置。 不支持此配置。

當我運行應用程序並推送表視圖控制器,它出現,但似乎沒有什麼是從nib文件加載(例如我設置爲0而不是1)。

任何想法,我做錯了什麼?

感謝您的幫助。


以下是一些可幫助您更好地瞭解情況的更多信息。

我注意到創建一個UITableViewController與模板(例如通過創建一個新的基於導航的應用程序)與自己創建一個(例如,遵循上述步驟)之間的一些差異。我將分別稱爲TemplateNib和CustomNib,以便更容易理解這些差異。

在TemplateNib,它在文檔窗口中的下列對象:

  • 文件的所有者
  • 急救員
  • 表視圖

在CustomNib,它在下列對象文件窗口:

  • 文件的所有者
  • 急救員
  • 我的自定義表視圖控制器
    • 表視圖

另一個不同之處是在文件的所有者聯繫...

TemplateNib的文件的所有者:

  • 奧特萊斯
  • 的tableView - >表視圖
  • 視圖 - >表視圖
  • 引用奧特萊斯
  • 數據源 - >表視圖
  • 委託 - >表格視圖

CustomNib文件的所有者:

  • 奧特萊斯
  • 視圖 - >(無)

CustomNib我的表視圖控制器:

  • 奧特萊斯
  • 視圖 - >表視圖(這是灰色的,所以你不能刪除)
  • 引用奧特萊斯
  • 數據源 - >表視圖
  • 委託 - >表視圖

更新:

我試圖模仿由templat創建的.xib文件e通過以下步驟:

  1. 在Interface Builder中創建一個空文件。
  2. 將文件所有者設置爲從UITableViewController繼承的類。
  3. 在文檔窗口中添加了一個表格視圖。
  4. 將表視圖的dataSource和委託設置爲文件的所有者。
  5. 將文件的所有者視圖設置爲表視圖。
  6. 類型的Identity窗格中添加了tableView propery UITableView
  7. 將文件的所有者tableView屬性(我剛剛創建)設置爲表視圖。

但是,這似乎仍然不是從NIB文件加載它。 (我也從來沒有設置NIB文件的名稱,儘管...有沒有什麼地方需要設置它,或者它是否在尋找一個具有相同名稱的文件?)。

然後,我嘗試覆蓋initWithNibName從nib文件的名稱加載,現在它好像從nib文件加載它。但是,如果我看看。m文件的TemplateNib表視圖控制器,它不需要重寫此方法,爲什麼?我仍然認爲我做錯了,因爲編程指南沒有提到這樣做的任何事情。


更新:

我試圖用比較一個diff工具兩個文件的.xib,兩者之間的唯一區別顯著似乎是:

<string key="superclassName">UITableViewController</string> 
// and: 
<reference key="NSSuperview"/> 

我沒有看到任何在任何地方引用原始文件中的Nib文件,是否還有其他文件需要檢查?


更新:

好像使TemplateNib負荷從筆尖文件的事情是,在MainWindow.xib中(由模板給出的默認名稱),該RootViewController的添加與NIB名稱具有值「RootViewController」的屬性。另外,它的類被設置爲「RootViewController」。

我試着在initWithNibName:bundle:和initWithStyle:在RootViewController上放置一個斷點,但是它永遠不會到達那裏。我有點想知道如何在MainWindow.xib中設置TableViewController。

我也嘗試添加我的自定義表視圖控制器到MainWindow.xib,設置類和筆尖名稱,希望它會從我指定的筆尖文件加載它,但它甚至不會調用iniWithNibName。

+0

我剛剛遇到同樣的錯誤。有沒有人找出修復文件而不重新創建的方法? – 2009-10-22 19:27:54

+0

謝謝,非常的Userful – goe 2012-06-12 11:24:15

回答

7
  1. 在Xcode中創建一個TableViewController。
  2. 在Interface Builder中創建一個空的筆尖文件。
  3. 將文件的所有者類屬性設置爲步驟1中的TableViewController。
  4. 將TableView添加到空的nib文件。
  5. 將文件的所有者視圖屬性設置爲步驟4中的TableView。
  6. 根據需要自定義IB中的TableView。
  7. 覆蓋的initWithNibName:包:在Xcode方法爲TableViewController您創建類似於下面的代碼使用:


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if (self = [super initWithNibName:@"MyNibName" bundle:nibBundleOrNil]) { 
     // Custom initialization 
    } 
    return self; 
} 
+0

我找不到正確的方法來做到這一點,而不必在Xcode中引用nib名稱,但現在這是我找到的最好的方法。如果有人找到更好的方法,我會更新接受的答案。 – Senseful 2009-10-27 05:05:20

+0

在哪裏添加上述方法? – 2016-10-26 05:32:52

0

而不是做所有這些,我會使用「新建文件」iPhone UI模板創建一個選中xib文件的TableViewController選項。然後你得到一個控制器和xib文件都妥善連接在一起。

+0

我沒有看到的UITableViewController該選項......我只看到它的UIViewController。這將是一個更容易的解決方案。 – Senseful 2009-10-08 04:16:05

1

Eagle,當你創建一個新文件時,選擇「UIViewController subclass」圖標。有一個複選框使其成爲複選框上方的UITableViewController子類以包含XIB文件。

+0

我沒有看到這個選項,我正在運行Xcode 3.1.3。 – Senseful 2009-10-23 22:44:11

1

你有兩個地方,你的UITableViewController顯示出來在Interface Builder中。

(1)它用控制器自己的名字顯示在筆尖上。 (2)它顯示爲另一個對象的筆尖中的控制器對象,通常是MainWindow。

你的問題是在(2)。有兩種方法可以在「接口」構建器中爲UITableViewController設置tableview。首先,您可以在MainWindow中的控制器下創建一個UITableView,並將其連接到控制器的視圖屬性。其次,你可以調出該督察屬性窗格中列出「NibName」的popmenu選擇控制器筆尖的名稱。

你不能一次,因爲第一次加載從主窗口榫文件和第二負載從控制器的單獨的榫文件中的完全不相關的視圖中的視圖中使用兩個系統。

這是那些令人抓狂的錯誤,使用Interface Builder使得如此難以追查之一。

2

我昨晚做了同樣的問題,並發現這個職位,同時試圖尋找答案。我最終解決了它。

基本上我已經打開了錯誤的XIB文件(我希望main_window.xib,不是視圖控制器XIB)

我剪的所有控件從我的主要廈門國際銀行,粘貼他們到廈門國際銀行的控制器,重新調整了一切,重新連接所有的網點/行動和警告消失:)

希望這可以幫助別人:)

相關問題