ACB*_*urk 5 iphone xcode interface-builder uitableview uiviewcontroller
进入一些有趣的事情,想知道我做错了什么或者这是否是正确的行为.
我有一个自定义UITableViewController.我假设(第一个错误),如果你这样初始化:
[[CustomTableController alloc] init];
Run Code Online (Sandbox Code Playgroud)
如果它位于同一目录中,它会自动从同名的XIB(CustomTableController.xib)加载.
然而
这不起作用; 不加载XIB.但是,如果我将我的控制器的父类从'UITableViewController'更改为'UIViewController',那么每个工作都很精细!
呼叫:
[[CustomTableController alloc] init];
Run Code Online (Sandbox Code Playgroud)
从我的xib加载控制器和视图.
难道我做错了什么?这是一个错误吗?预期的行为?
cdu*_*uhn 26
Cocoa Touch中的大多数类都列出了一个"指定的初始化程序",init当你将它们子类化时,你应该从你的方法中调用它们.当您创建自己的自定义类时,最好检查文档以查找超类的指定初始化程序.当您使用来自更通用超类的其他初始化程序初始化类时([NSObject init]在这种情况下,您正在通过调用来执行此操作),您将抢夺您的直接超类,以便正确初始化其状态.有时你可以逃脱这一点.通常你不能.
UIViewController的文档声明它的指定初始化程序是 - initWithNibName:bundle:.如果使用nil nibName调用此方法,它将查找与您的类名匹配的nib.该行为-init未被记录UIViewController.基于您所看到的行为,它似乎可能正在调用[self initWithNibName:nil bundle:nil],但initWithNibName:bundle:直接调用而不是依赖于此未记录的行为会更安全.
UITableViewController仅定义单个初始化程序-initWithStyle:(尽管它没有将此方法指定为指定的初始化程序).这个方法初始化你的UITableViewController而不使用nib,这通常很好.由于您没有将子视图添加到UITableView,因此通过nib配置UITableViewController通常无法获得太多.
如果您决定通过nib配置UITableViewController,文档告诉我们可以安全地绕过-initWithStyle:并调用UIViewController的initWithNibName:bundle:方法.以下是文档告诉我们在每种情况下如何初始化UITableView及其控制器的内容:
如果通过
initWithNibName:bundle:方法指定了一个nib文件(由超类UIViewController声明),UITableViewController将加载在nib文件中存档的表视图.否则,它会创建一个具有正确尺寸和自动调整大小掩码的未配置UITableView对象.您可以通过tableView属性访问此视图.如果加载了包含表视图的nib文件,则数据源和委托将成为nib文件中定义的那些对象(如果有).如果未指定nib文件或者nib文件未定义数据源或委托,则UITableViewController将表视图的数据源和委托设置为self.
总之,大多数Cocoa Touch类的文档要么指定一个指定的初始化程序,要么指定一些可以从子类中安全调用的初始化程序.请始终参考超类的文档,找出子类应调用的初始化程序.
| 归档时间: |
|
| 查看次数: |
6325 次 |
| 最近记录: |