为什么 UIViewController 的子类的 init 方法有时无法加载同名 nib 文件?

发布于 2024-12-11 15:54:05 字数 366 浏览 0 评论 0原文

我知道 UIViewController 的指定初始化程序是

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

如果你调用 init,根据文档它将加载类的同名 nib 文件(如果存在)。

但我遇到的是有时 init 确实做对了一切。但有时某些 UIViewController 的子类的 init 方法只是不加载它的 nib 文件。我使用相同的方式创建它们(使用 Xcode 的助手创建 UIViewController 子类并同时关联它的 nib 文件,因此文件名应该全部相同)。

为什么会发生这种情况?

I know that UIViewController's designated initializer is

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

If you call init,according to the documentation it will load the class's same name nib file(if it exist).

But what I encounterd is that sometimes init does do everything right. But sometimes some UIViewController's subclass 's init method just don't load it's nib file. I create them using the same way(using Xcode's assistant to create a UIViewController subclass and it's associated nib file at the same time, so the file name should all be the same).

Why is this happening?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜中书 2024-12-18 15:54:05

我发现如果该类是 UITableViewController 的子类,则必须使用 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
从笔尖初始化。

这是因为 UIViewController 的指定初始值设定项是:

(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

因此,如果您使用 init,它将调用 <代码>(id)initWithNibName:(NSString *)nibNameOrNil 捆绑包:(NSBundle *)nibBundleOrNil for 你。

但是 UITableViewController 的指定初始值设定项是:

- (id)initWithStyle:(UITableViewStyle)style

在 UITableViewController 上使用 init 将调用 initWithStyle 而不是 initWithNibName

I figure out that if the class is UITableViewController's subclass, you must use - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
to init from nib.

This is because UIViewController's designate initializer is:

(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

so if you use init,it would therefore call (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil for you.

But UITableViewController's designate initializer is:

- (id)initWithStyle:(UITableViewStyle)style

using initon UITableViewController will call initWithStyle not initWithNibName

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文