0

我的应用程序的更新需要一个设置,用户可以在其中选择要加载的视图。因此,由于我使用的是故事板,因此我设法创建了一个视图控制器,该控制器通过故事板连接到另一个充当“根视图控制器”的视图

然后我将以下代码添加到该视图中,我在这里使用示例字符串来测试代码是否有效。

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString *test = @"one";

    id rootController;
    if (test == @"one") {
        rootController = [self.storyboard instantiateViewControllerWithIdentifier:@"one"];


    } else if (test == @"two") {
        rootController = [self.storyboard instantiateViewControllerWithIdentifier:@"two"];

    }
    else if (test == @"three") {
        rootController = [self.storyboard instantiateViewControllerWithIdentifier:@"three"];

    }

    else {
        rootController = [self.storyboard instantiateViewControllerWithIdentifier:@"none"];

    }
    self.view = [NSArray arrayWithObjects:rootController, nil];
}

但是每当应用程序启动时,就会抛出以下异常:

2012-11-23 16:30:40.482 MyApp[1587:c07] -[__NSArrayI _setViewDelegate:]: unrecognized selector sent to instance 0x716cf30
2012-11-23 16:30:40.501 MyApp[1587:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI _setViewDelegate:]: unrecognized selector sent to instance 0x716cf30'
*** First throw call stack:
(0x1c8e012 0x10cbe7e 0x1d194bd 0x1c7dbbc 0x1c7d94e 0xf85ac 0xf4a90 0x2dee 0xf4817 0xf4882 0xf4b2a 0x10bef5 0x10bfdb 0x10c286 0x10c381 0x10ceab 0x10cfc9 0x10d055 0x2123ab 0x6392d 0x10df6b0 0x228afc0 0x227f33c 0x228aeaf 0x1028cd 0x4b1a6 0x49cbf 0x49bd9 0x48e34 0x48c6e 0x49a29 0x4c922 0xf6fec 0x43bc4 0x43dbf 0x43f55 0x4cf67 0x10fcc 0x11fab 0x23315 0x2424b 0x15cf8 0x1be9df9 0x1be9ad0 0x1c03bf5 0x1c03962 0x1c34bb6 0x1c33f44 0x1c33e1b 0x117da 0x1365c 0x21dd 0x2105)
libc++abi.dylib: terminate called throwing an exception

为什么代码不起作用?

4

1 回答 1

1

如果你使用 Storyboards,你也应该使用 Segues,它与 iOS5 的 Storyboards 是同时引入的。

在您的 MainStoryboard.storyboard 中,您将显示根 ViewController 和另外三个 ViewController。选择您的根 ViewController,ctrl + 左键单击并拖动到另一个 ViewController 上并释放。你会看到一个黑色的小对话框出现,上面写着 Manual Segue(发音为 seg-way),选择 Modal。

您现在将看到一条连接这两个 ViewController 的线。单击右侧工具栏(检查器)中的行并选择属性检查器选项卡按钮。给 segue 标识符“One”。

现在在 Root View 控制器中,在 ViewDidLoad 方法中添加以下方法:

  if ([test isEqualToString:@"one"]) {
        [self performSegueWithIdentifier:@"one" sender:nil];
    }
于 2012-11-23T15:47:47.890 回答