0

这个问题与这个有关。我有两个构造函数:

- (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,因为它们是 nil,而它们不在横幅中。但是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

我应该如何处理这种行为?

4

2 回答 2

0

你的initWithPreview:方法有错误。大概应该说:

[super initWithNibName:@"UIPreview" bundle:nil]
于 2011-03-15T13:38:18.163 回答
0

你在你做的事情init应该独立于你在做的事情viewDidLoad。任何依赖的东西都self.view应该在viewDidLoad.

是在完成之前还是viewDidLoad之后调用init取决于加载视图需要多长时间以及执行init.

于 2011-03-15T12:59:10.473 回答