我试图按照Table View Programming Guide for iPhone OS,但无法创建一个新的表视图控制器,从nib文件加载它的数据。创建一个表视图控制器的笔尖文件
具体来说,我试图按照this part步骤:
如果你愿意来加载从笔尖文件通过自定义表视图管理 控制器表视图 ,你必须 做如下:
- 在Interface Builder中,创建一个空的Cocoa Touch nib文件(文件> 新建)。
- 将UITableViewController对象从Interface Builder 库拖到nib文档窗口中。
- 将nib文件保存在您的项目目录下,名称为 ,并在出现提示时选择您的 项目以将nib文件添加到 它。
- 在笔尖文档窗口中选择Table View Controller,然后打开检查器的Identity窗格。将 设置为您的自定义表格视图 控制器类。
- 在笔尖文档窗口中选择文件所有者,并将其类别 标识设置为自定义表格视图 控制器类。
- 在Interface Builder中自定义表格视图。
- 选择笔尖文档窗口表视图控制器,打开检查的 属性面板,并 输入(或选择)在笔尖名称字段笔尖 文件的名称。
因此,我创建在Xcode中新的UITableViewController子类(称为“MyTableViewController”),然后我进入IB和遵循这些步骤。我确保将所有类属性链接到与我在Xcode中制作的UITableViewController子类相同的名称,就像它在步骤中所述。
但现在我得到以下警告在IB:
“我的表视图控制器”既有 “查看”和“笔尖名称”属性中设置。 不支持此配置。
当我运行应用程序并推送表视图控制器,它出现,但似乎没有什么是从nib文件加载(例如我设置为0而不是1)。
任何想法,我做错了什么?
感谢您的帮助。
以下是一些可帮助您更好地了解情况的更多信息。
我注意到创建一个UITableViewController与模板(例如通过创建一个新的基于导航的应用程序)与自己创建一个(例如,遵循上述步骤)之间的一些差异。我将分别称为TemplateNib和CustomNib,以便更容易理解这些差异。
在TemplateNib,它在文档窗口中的下列对象:
- 文件的所有者
- 急救员
- 表视图
在CustomNib,它在下列对象文件窗口:
- 文件的所有者
- 急救员
- 我的自定义表视图控制器
- 表视图
另一个不同之处是在文件的所有者联系...
TemplateNib的文件的所有者:
- 奥特莱斯
- 的tableView - >表视图
- 视图 - >表视图
- 引用奥特莱斯
- 数据源 - >表视图
- 委托 - >表格视图
CustomNib文件的所有者:
- 奥特莱斯
- 视图 - >(无)
CustomNib我的表视图控制器:
- 奥特莱斯
- 视图 - >表视图(这是灰色的,所以你不能删除)
- 引用奥特莱斯
- 数据源 - >表视图
- 委托 - >表视图
更新:
我试图模仿由templat创建的.xib文件e通过以下步骤:
- 在Interface Builder中创建一个空文件。
- 将文件所有者设置为从UITableViewController继承的类。
- 在文档窗口中添加了一个表格视图。
- 将表视图的dataSource和委托设置为文件的所有者。
- 将文件的所有者视图设置为表视图。
- 在类型的Identity窗格中添加了tableView propery UITableView。
- 将文件的所有者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。
我刚刚遇到同样的错误。有没有人找出修复文件而不重新创建的方法? – 2009-10-22 19:27:54
谢谢,非常的Userful – goe 2012-06-12 11:24:15