【问题标题】:Views are not showing after renaming nib files重命名 nib 文件后视图不显示
【发布时间】:2011-07-11 09:24:27
【问题描述】:

我已经重命名了一些 nib 文件,来自

EEMSystemDetailElpho 到 EEMSystemDetailElphoView, EEMSystemDetailTransfer 到 EEMSystemDetailTransferView, EEMSystemDetailProbing 到 EEMSystemDetailProbingView。

他们有相应的文件所有者,但仍然没有改变。

它们都是 UIScroll 视图的一部分,并且 UIScroll 视图已加载并显示,但是在重命名 nib 文件后,我的三个子视图均不可见。我像以前一样通过分配和初始化控制器来加载视图。

NSMutableArray *controllers = [[NSMutableArray alloc] init];
elphoController = [[EEMSystemDetailElphoController alloc] init];
[controllers addObject:elphoController];
CGRect frame = scrollView.frame;
frame.origin.x = 0;
frame.origin.y = 0;
elphoController.view.frame = frame;
[scrollView addSubview:elphoController.view];

transferController = [[EEMSystemDetailTransferController alloc] init];
[controllers addObject:transferController];
frame.origin.x = frame.size.width;
frame.origin.y = 0;
transferController.view.frame = frame;
[scrollView addSubview:transferController.view];

probingController = [[EEMSystemDetailProbingController alloc] init];
[controllers addObject:probingController];
frame.origin.x = frame.size.width * 2;
frame.origin.y = 0;
probingController.view.frame = frame;
[scrollView addSubview:probingController.view];

viewControllers = controllers;
[controllers release]; 

我注意到,如果我将旧的 .nib 文件添加到 Library/Application Support/Iphone Simulator/(current version)/Applications/(specific app) 下的特定应用程序文件夹中,则会显示视图。这表明 XCode 在某种程度上没有注意到我对文件名的更改。运行应用程序时我没有收到任何错误,只是没有显示我的视图。

有什么想法吗?

【问题讨论】:

    标签: iphone xcode cocoa-touch


    【解决方案1】:

    如果 nib 名称与管理它的视图控制器名称不同,那么您应该使用

    - (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle
    

    例如,您的第一个控制器将被加载

    elphoController = [EEMSystemDetailElphoController alloc] initWithNibName:@"EEMSystemDetailElphoView" bundle:nil]];
    

    这是UIViewController的指定初始化器

    根据 Apple 的文档

    如果您为 nibName 参数指定 nil,您必须覆盖 loadView 方法并在那里创建您的视图,或者您必须在包中提供一个名称(不带 .nib 扩展名)与您的视图控制器名称匹配的 nib 文件班级。 (在后一种情况下,类名成为存储在 nibName 属性中的名称。)如果您不执行这些操作,视图控制器将无法加载其视图

    强调我的

    只有在UIViewController 没有 nib 时才使用 vanilla init,或者保证 nib 名称和视图控制器名称相同。即使在后一种情况下,您也确实应该使用指定的初始化程序并为nibNamenibBundle 传递nil

    【讨论】:

    • 效果很好,谢谢。从现在开始,我将始终在初始化期间告诉要加载哪个 nib 文件!
    【解决方案2】:

    尝试删除连接并连接回各自的文件所有者。 从模拟器和您的应用程序文件夹中删除构建并再次运行它。

    希望它有效。

    TNX

    【讨论】:

      【解决方案3】:

      当您重命名文件时,连接将消失。所以请找到这个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-04
        相关资源
        最近更新 更多