我想为UIViewController
构建一个自定义的初始化方法,但是在互联网上进行了深入研究后,特别是在SO中,我对指定的初始化程序感到困惑。如何编写防止viewDidLoad被调用的自定义初始化程序?
我有一个UIViewController
的与这两个初始化的子类:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
}
return self;
}
- (id) initWithFilename:(NSString *)aFilename {
self = [self initWithNibName:@"WallpaperDetailsViewController" bundle:nil];
if (self) {
self.filename = aFilename;
}
return self;
}
然后,我有一个viewDidLoad
方法,根据filename
属性定制视图:
- (void)viewDidLoad {
[super viewDidLoad];
// Create a UIImageView to display the wallpaper
self.wallpaper = [[UIImageView alloc] initWithImage:[UIImage imageNamed:self.filename]];
// ...
}
在另一个UIViewController
我拨打以下电话:
WallpaperDetailsViewController *detailsViewController = [[WallpaperDetailsViewController alloc] initWithFilename:@"foobar.png"];
[[self navigationController] pushViewController:detailsViewController animated:YES];
结果是viewDidLoad
由于[self initWithNibName:]
而被调用,它不初始化UIImageView
,因为self.filename
为空。
根据其他SO问题和答案,这应该是预期的行为。我是因为在其他项目之前的iOS 5,我的问题是我自己的经验,不知道这一点:
我怎样才能确保viewDidLoad:
是呼叫initWithFilename:
和initWithNibNameOrNil:bundle:
之间initWithFilename:
而不是之后?
如果这不可行,我该如何实现一个接收自定义数据以创建和定制视图的初始化方法?
谢谢!
如何定义文件名?宣称的财产或定制配件? – logancautrell
'filename'被定义为'@property(strong,nonatomic)NSString * filename;'在'WallpaperDetailsViewController'的'@interface'声明中# – elitalon
正在导致视图加载的init代码中发生了一些事情。设置一个中断点,看看有没有负载,看看为什么它被调用提前。 – logancautrell