在initWithNib上分配另一个viewcontroller

时间:2012-08-07 17:00:53

标签: objective-c ios cocoa ipad ios4

我只是好奇,如果让我说我有一个webView的单例属性我试图在另一个viewController的初始化点分配。编译器生成错误,指示“不兼容的指针类型”。

我不确定为什么会这样做,因为该类的超类仍然是UIViewController。这里的任何帮助都会非常感激。

感谢。

以下代码:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {

    self = [super initWithNibName:nil bundle:nil];

    if (self) {

        // Work your initialising magic here as you normally would
        if ([[CartCheckout sharedInstance] universalVC]) {
            //self = [[CartCheckout sharedInstance] universalVC];
            NSLog(@"testing");
            self = [[CartCheckout sharedInstance] universalVC];
        }
        NSLog(@"initWithNibName allocated");
    }

    return self; }

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为您尝试进行分配的实际实例的视图控制器的类型不正确,它们共享超类并不重要。

在这种情况下,

self是一种且只有一种类型,即视图控制器子类的类型。

此外,即使它们是相同的类型,Objective C也不会让你在init方法中用任何东西替换类的实例。

init方法是实例分配方法,如果你返回指向你实际所在实例之外的东西的指针,你将立即崩溃。

所以你有两个问题,一个,你试图将一个单例实例注入一个init方法,另外两个你试图劫持一个视图的容器。

这些都不会奏效。实例化正确类型的viewController,以便在您需要时随身携带。

你想要的是:

MyUniversalViewController *universalVC = [MyUniversalViewController alloc] initWithNibName:@"blabla

尝试在构造函数中切换类型为时已晚。