一个视图同时只能与一个视图控制器关联(UISegmentedControl)

23

你好,错误出现在 iOS 6 模拟器中。

由于“一个视图只能同时与一个视图控制器关联!”,因此未捕获的异常'UIViewControllerHierarchyInconsistency'导致应用程序终止。 视图<UIView:0xa3ae880; frame=(0 0;320 367); autoresize=W+H; layer=<CALayer:0xa3ae8e0>>与<SearchHotelsViewController:0xa3a6a20>相关联。 在将此视图与<SecondViewController:0xa1a9e90>关联之前,请清除该关联。

初始化代码

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Поиск туров", @"Выбор отеля", nil]];

segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
self.navigationItem.titleView = segmentedControl;

[segmentedControl addTarget:self action:@selector(changeSegments:) forControlEvents:UIControlEventValueChanged];
segmentedControl.selectedSegmentIndex = 0;
self.navigationItem.title = [segmentedControl titleForSegmentAtIndex:segmentedControl.selectedSegmentIndex];
[self setView:searchTours];

SearchHotelsViewController *searchHotelsController = [[SearchHotelsViewController alloc] initWithNibName:@"SearchHotelsViewController" bundle:[NSBundle mainBundle]];
selectHotels = searchHotelsController.view;

selected == 1true时,应用程序崩溃。

-(void)changeSegments:(id)sender {
    NSInteger selected = [sender selectedSegmentIndex];
    if (selected == 0) {
        [self setView:searchTours];
    }
    if (selected == 1) {
        [self setView:selectHotels];
    }
    self.navigationItem.title = [sender titleForSegmentAtIndex:selected];
}

我无法理解问题出在哪里。

SearchHotelsViewController.xib

SearchHotelsViewController.xib

6个回答

24

请确保您的 ViewController 不含其他视图控制器对象。例如,如果您的主视图控制器具有一个表视图,请不要将 UITableViewController 放在其中。虽然这在 iOS 5 中是可以传递的,但在 iOS 6 中他们不允许这样做。


16

我在一个愚蠢的时候,将一个“UITableViewController”对象拖入了nib来作为视图,而不是一个“UITableView”。糟糕!


1
哈哈,我也做了同样的事情。谢谢你! - Will
3
我做了类似的事情,创建了一个XIB并添加了一个UIViewController -> UIView,而不是简单地添加UIView... - Frederic Yesid Peña Sánchez

14

我也遇到了这个问题,以下是我的解决方案。

为了方便起见,我从storyboard中将“UIViewController”对象拖到了nib文件中。

不需要删除并重新创建。

在nib文件中,我从控制器对象中拖出了视图对象,然后删除了控制器对象。

并将视图对象的Outlet设置为其真正的独立所有者“viewController类”,同样在nib中进行。

111


更多细节:

  • 原始内容:

111

  • 步骤一,拖动和删除:

222

  • 步骤二,链接它:

333

  • 完成,检查它:

666


10

我从Storyboard复制/粘贴到xib文件时遇到了这个问题。通过从xib中重新创建界面来解决了这个问题。


只需从“ViewController”中拖出“View”,并将其链接到“文件所有者”。不要忘记删除“视图控制器”。 - Akshay Phulare

2

我曾经遇到过类似的问题。有多个xib文件,其中一些可以正常工作,而另一些则不能,但它们都只包含了一个UITableView。我不得不删除那些出问题的xib文件,然后重新创建新的文件。之后它们就都可以正常工作了。


0
如果您尝试将一个xib文件设置为视图控制器,则您的xib文件对象必须是窗口对象,而不是视图控制器,并且您的xib文件的所有者类必须是您的目标视图控制器类。然后,您应该在主视图与文件所有者输出之间添加关系。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接