在UIViewControllers中访问self.view init方法会导致崩溃

时间:2012-08-25 20:29:20

标签: ios uiviewcontroller

我有一个带有自定义init方法的UIViewController,如下所示:

- (id)initWithFrame:(CGRect)frame_ customObject:(CustomObject *)object_ {
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        self = [super initWithNibName:@"ArtistViewController_iPad" bundle:nil];
    } else {
        self = [super initWithNibName:@"ArtistViewController" bundle:nil];
    }

    [self.view setFrame:frame_];

    self.customObject = object_;

    return self;
}

但是当[self.view setFrame:frame_];被调用,它在日志中崩溃:

(空) libc ++ abi.dylib:terminate调用抛出异常

这是我从另一个UIViewController分配UIViewController的方式:

CGRect frame = self.view.frame;

artistViewController = [[ArtistViewController alloc] initWithFrame:frame customObject:anObject];

框架存在。 self存在于[super initWithNibName:bundle];

但是self.view似乎不存在。存在nib文件并将其视图连接起来。

为什么会这样?

1 个答案:

答案 0 :(得分:3)

您不应该从初始化程序中访问该视图。根据你真正想要完成的工作,有几个更合适的地方可以完成这项工作。

阅读视图控制器生命周期,以了解您可能希望进行修改的位置。

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html#//apple_ref/doc/uid/TP40007457-CH10-SW1