为什么 UIViewController 的子类的 init 方法有时无法加载同名 nib 文件?
我知道 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我发现如果该类是 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 的指定初始值设定项是:
在 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:
using
init
on UITableViewController will callinitWithStyle
notinitWithNibName