2009-10-07 83 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)

我剪的所有控件从我的主要厦门国际银行,粘贴他们到厦门国际银行的控制器,重新调整了一切,重新连接所有的网点/行动和警告消失:)

希望这可以帮助别人:)

相关问题