gpt4 book ai didi

iphone - 自动加载 UITableViewController 的 XIB

转载 作者:行者123 更新时间:2023-12-03 18:49:01 26 4
gpt4 key购买 nike

遇到一些有趣的事情,想知道我是否做错了什么或者这是否是正确的行为。

我有一个自定义的 UITableViewController。我假设(第一个错误)如果你这样初始化:

[[CustomTableController alloc] init];

它会自动从同名的 XIB CustomTableController.xib 加载(如果它位于同一目录等)。

但是

这不起作用;不加载 XIB。但是,如果我将 Controller 的父类从“UITableViewController”更改为“UIViewController”,则一切正常!

调用:

[[CustomTableController alloc] init];

从我的 xib 加载 Controller 和 View 。

我做错了什么吗?这是一个错误吗?预期的行为?

最佳答案

Cocoa Touch 中的大多数类都会列出一个“指定的初始值设定项”,当您对它们进行子类化时,您应该从 init 方法中调用它。当您创建自己的自定义类时,最好检查文档以查找父类(super class)的指定初始值设定项。当您使用更通用的父类(super class)中的其他初始化程序初始化该类时(在本例中您通过调用 - [NSObject init] 来执行此操作),您就剥夺了直接父类(super class)正确初始化的机会它的状态。有时你可以摆脱这个。通常你不能。

UIViewController 的文档指出其指定的初始值设定项是 -initWithNibName:bundle:。如果您使用 nil nibName 调用此方法,它将查找与您的类名匹配的 nib。 -init 的行为对于 UIViewController 没有文档记录。根据您所看到的行为,它似乎可能正在调用 [self initWithNibName:nil bundle:nil],但调用 initWithNibName:bundle: 会更安全> 直接而不是依赖于这种未记录的行为。

UITableViewController 仅定义一个初始值设定项,-initWithStyle:(尽管它没有指定此方法作为指定的初始值设定项)。此方法在不使用 Nib 的情况下初始化 UITableViewController,这通常没问题。由于您不向 UITableView 添加 subview ,因此通过 nib 配置 UITableViewController 通常不会获得太多好处。

如果决定无论如何都要通过 nib 配置 UITableViewController,文档告诉我们可以安全地绕过 -initWithStyle: 并调用 UIViewController 的 initWithNibName:bundle: 方法。以下是文档告诉我们的 UITableView 及其 Controller 在每种情况下如何初始化的内容:

  • If a nib file is specified via the initWithNibName:bundle: method (which is declared by the superclass UIViewController), UITableViewController loads the table view archived in the nib file. Otherwise, it creates an unconfigured UITableView object with the correct dimensions and autoresize mask. You can access this view through the tableView property.

  • If a nib file containing the table view is loaded, the data source and delegate become those objects defined in the nib file (if any). If no nib file is specified or if the nib file defines no data source or delegate, UITableViewController sets the data source and the delegate of the table view to self.

总之,大多数 Cocoa Touch 类的文档要么指定一个指定的初始值设定项,要么指定几个可以从子类安全调用的初始值设定项。请始终引用父类(super class)的文档来确定子类应该调用哪个初始化程序。

关于iphone - 自动加载 UITableViewController 的 XIB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2596336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com