笔记中的UIView在iPad上是零,而在iPhone上则不是零

Aar*_*ron 3 null nib iboutlet ios

我的应用程序有一个奇怪的问题.我在运行时使用名为"LoginViewController"的NIB加载VC.NIB有一堆出口到NIB中的UIView对象,如下所示:

在此输入图像描述

在运行时,我动态地将这些UIView对象作为标题放在我的表视图中.UIView在这种情况下,每个单独的(除了UITableView右边的那个)被设置为像这样的IBOutlet.每个人当然都有不同的名字:

@property (strong, nonatomic) IBOutlet UIView *connectionInProgressView;
Run Code Online (Sandbox Code Playgroud)

现在,在我的VC viewDidLoad方法中,我遍历所有这四个单独的视图,并通过写入日志来确保它们存在:

NSLog(@"connection in progress view: %@", self.connectionInProgressView);
Run Code Online (Sandbox Code Playgroud)

我的问题是:self.connectionInProgressView在iPad上为零而在iPhone上为零.无论平台如何,所有其他视图都不是零并且是实例化的.我在iOS 5.0,5.1和6.1的模拟器中运行它.我可以在所有iPad模拟器上重现这个问题.我的应用程序运行正常,并在iPhone上使用微调器加载视图,但在iPad上它无法加载该视图,因为它是零!为什么!?

我尝试过以下方法:

  • 检查我的NIB的文件所有者是否指向正确的视图
  • self.connectionInProgressView并不指向任何其他IBOutlet
  • 检查所有其他子视图是否与违规视图挂钩.他们是.
  • 删除self.connectionInProgressView所有NIB连接后删除并重新创建它.
  • 从视图中删除活动指示器并仅加载UILabel内部视图.没有运气,它不是活动指标.
  • 检查VC中可能引用的任何代码self.connectionInProgressView.没有(除了它的nil声明viewDidUnLoad).
  • 检查上的我的AppDelegate性质的财产属性类型UINavigationControllerLoginViewController.
  • 保留LoginViewControllerAppDelegate 的副本,虽然这看起来很浪费,并没有对结果产生影响.

[编辑2]

问题:如何加载VC

我有一个UINavigationController是我的AppDelegate的属性.这UINavigationControllerapplicationDidFinishLaunchingWithOptions我通过我的VC作为根视图控制器的alloc-init'd .我此时实例化了VC.

// Create login/start up views
LoginViewController *loginViewController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];

self.loginViewNavigationController = [[UINavigationController alloc] initWithRootViewController:loginViewController];

if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)
    self.loginViewNavigationController.modalPresentationStyle = UIModalPresentationFormSheet;
Run Code Online (Sandbox Code Playgroud)

请注意,这是在iPhone上工作,即使我稍后会UINavigationController在iPad上将其作为模态表格(不确定这是否有助于我的问题).

一段时间后,在AppDelegate中,当一个不同的委托类抛出一个事件时,我将以模态方式呈现这个UINavigationController.我这样做:

if (self.loginViewNavigationController != nil) {

    [self.window.rootViewController presentViewController:self.loginViewNavigationController animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

我正在试图确定为什么这个特定的视图拖到我的NIB并且连接相同,因为所有其他视图在iPad上为零而在iPhone上为零.

[编辑1]在搜索重复的问题时,我没有找到:

一些指向零的IBOutlets

我并不孤单!

有任何想法吗?

Ali*_*are 5

当你正在构建一个通用的应用程序,你确定你没有iPhone和iPad(创建一个单独的NIB LoginViewController.xibLoginViewController~ipad.xib一般)?

或许你认为你只有一个XIB,但在某些时候你有一个专用的XIB for iPad编译成NIB,即使你删除了项目中的XIB文件,专用于iPad的编译NIB仍然在构建产品中.

在任何情况下,尝试:

  • 清理您的项目,甚至更好的构建产品目录
  • 要执行后者,您可以删除"派生数据"文件夹("管理器"窗口 - >"项目"选项卡 - >选择左侧项目 - >单击"派生数据"旁边的"删除"按钮)
  • 从所有模拟器中删除您的应用程序,只是为了确定
  • 再次构建和运行

如果这不起作用,一些想法可以帮助您调试并确定问题是否与使用不同XIB的iPad相关:

  • 您可以尝试一些测试,例如修改另一个IBOutletXIB,例如断开其中一个IBOutlet不是nil来自XIB中连接的视图,这样当您再次运行应用程序时,应该记录下来nil.如果它nil在iPhone模拟器上(正如你刚刚断开它的预期那样)......但仍然不在niliPad模拟器上,那么它肯定意味着你为iPhone和iPad使用不同的XIB文件.
  • 您还可以在XIB中更改UIView正确连接到您的一个的颜色IBOutlet,并查看更改是反映在iPhone和iPad上还是仅反映在iPhone上,因此请检查您正在编辑的此XIB是否相同用于iPad或不用.