【问题标题】:Assigning another viewcontroller at initWithNib在 initWithNib 分配另一个视图控制器
【发布时间】:2012-08-07 17:00:53
【问题描述】:

我只是好奇是否可以说我有一个 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; }

【问题讨论】:

  • 你应该发布一些代码
  • 我认为您的问题仍然含糊不清。哪一行给出了错误?这段代码来自哪个类? [[CartCheckout sharedInstance] universalVC] 返回什么类型的对象? (我假设它是CartCheckout)你的类层次结构是什么样的?
  • nielsbot,这一行 self = [[CartCheckout sharedInstance] universalVC];是导致错误的原因。 UniversalVC 是 uiviewcontroller 的 CartCheckout 类中的一个属性,而 CartChechout 是一个 NSObject 类型的类。

标签: objective-c ios cocoa ipad ios4


【解决方案1】:

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

self 在这种情况下只有一种类型,即视图控制器子类的类型。

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

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

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

这些都不行。在需要时实例化正确类型的 viewController 以配合您的视图。

你想要的是这样的:

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

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

【讨论】:

    猜你喜欢
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    相关资源
    最近更新 更多