此问题与this one有关。我有两个构造函数:
- (id)initWithBanner:(NSMutableArray *)banners {
if ( self = [super initWithNibName:@"UIBanner" bundle:nil] ) {
testString = [[NSString alloc] initWithString:@"Banner"];
NSLog(@"Foo");
}
return self;
}
- (id)initWithPreview:(NSMutableArray *)previews {
if ( self = [super initWithNibName:@"UIBanner" bundle:nil];
testString = [[NSString alloc] initWithString:@"Preview"];
NSLog(@"Foo");
}
return self;
}
- (void)viewDidLoad {
NSLog(@"%@", testString);
}
在另一个对象中,我有两个这个类的实例叫做* bannerPreview和* bannerVideo,用initWithPreview和initWithVideo初始化。它发生了什么: 在预览构造函数中,我无法访问IBOutlets,因为它们是零,而它们不在横幅中。但是bannerVideo的viewDidLoad方法在构造函数完成之前被调用,而bannerPreview的viewDidLoad却没有。我在类中添加了一个字符串测试,并在上面列出的两种方法中添加了一个NSLog(@“Foo”),我的输出是:
2011-03-15 12:29:13.929 iUDC[2600:207] Foo
2011-03-15 12:29:13.934 iUDC[2600:207] preview
2011-03-15 12:29:15.038 iUDC[2600:207] (null)
2011-03-15 12:29:15.038 iUDC[2600:207] Foo
我该如何处理这种行为?
答案 0 :(得分:0)
您在init
中所做的事情应与您在viewDidLoad
中的行为无关。任何依赖于self.view
的内容都应该在viewDidLoad
中完成。
在viewDidLoad
完成之前或之后调用init
取决于加载视图所需的时间以及执行init
所需的时间。
答案 1 :(得分:0)
您的initWithPreview:
方法中存在错误。应该说:
[super initWithNibName:@"UIPreview" bundle:nil]