Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios nib中的UIView在iPad上是零,而在iPhone上不是零_Ios_Nib_Null_Iboutlet - Fatal编程技术网

Ios nib中的UIView在iPad上是零,而在iPhone上不是零

Ios nib中的UIView在iPad上是零,而在iPhone上不是零,ios,nib,null,iboutlet,Ios,Nib,Null,Iboutlet,我的应用程序有一个奇怪的问题。我在运行时用一个名为“LoginViewController”的NIB加载一个VC。该NIB有一系列到UIView对象的出口,这些对象放置在NIB中,如下所示: 在运行时,我将这些UIView对象作为标题动态地放置在表视图中。在这种情况下,每个单独的UIView(右侧带有UITableView的除外)都设置为IBOutlet,如下所示。当然,每个都有不同的名称: @property (strong, nonatomic) IBOutlet UIView *conn

我的应用程序有一个奇怪的问题。我在运行时用一个名为“LoginViewController”的NIB加载一个VC。该NIB有一系列到
UIView
对象的出口,这些对象放置在NIB中,如下所示:

在运行时,我将这些UIView对象作为标题动态地放置在表视图中。在这种情况下,每个单独的
UIView
(右侧带有
UITableView
的除外)都设置为IBOutlet,如下所示。当然,每个都有不同的名称:

@property (strong, nonatomic) IBOutlet UIView *connectionInProgressView;
现在,在我的VC的
viewDidLoad
方法中,我运行了这四个独立的视图,并通过写入日志确保它们存在:

NSLog(@"connection in progress view: %@", self.connectionInProgressView);
我的问题是:
self.connectionInProgressView
在iPad上是零,而在iPhone上不是零。不管平台如何,所有其他视图都不是nil,而是实例化的。我在iOS 5.0、5.1和6.1的模拟器上运行这个。我可以在所有iPad模拟器上重现这个问题。我的应用程序工作正常,在iPhone上用微调器加载视图,但在iPad上它无法加载视图,因为它是零!为什么

我尝试了以下方法:

  • 检查NIB文件的所有者是否指向正确的视图
  • self.connectionInProgressView
    不指向任何其他IBOutlet
  • 检查所有其他子视图的连接方式是否与有问题的视图相同。是的
  • 删除
    self.connectionInProgressView
    并在删除其所有NIB连接后重新创建它
  • 从视图中删除活动指示器并仅加载内部带有
    ui标签的视图。运气不好,这不是活动指标
  • 检查VC中是否有可能引用
    self.connectionInProgressView
    的代码。没有(除了
    viewDidUnLoad
    中的nil语句)
  • 正在检查
    UINavigationController
    LoginViewController
    的my AppDelegate属性上的属性类型
  • 在AppDelegate上保留
    LoginViewController
    的副本,尽管这似乎是浪费,并且不会对结果产生影响
[编辑2]

问:VC是如何加载的

我有一个
UINavigationController
,它是我的AppDelegate上的一个属性。该
UINavigationController
applicationdifinishlaunchingwithoptions
中被alloc init'd,我将VC作为根视图控制器传递给它。我在这里实例化了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;
请注意,这在iPhone上是有效的,尽管我稍后会在iPad上以模式表单的形式(不确定这是否导致我的问题)呈现此
UINavigationController

稍后在AppDelegate中,当一个不同的委托类抛出一个事件时,我将展示这个UINavigationController,其中包含我的VC。我是这样做的:

if (self.loginViewNavigationController != nil) {

    [self.window.rootViewController presentViewController:self.loginViewNavigationController animated:YES completion:nil];
}
我简直要发疯了,我想知道为什么这个特定的视图拖到我的笔尖上,然后和其他视图一样连接在一起,在iPad上是零,而在iPhone上不是零

[编辑1] 在搜索重复问题时,我未能找到以下内容:

我并不孤单


有什么想法吗?

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

或者,您可能认为您只有一个XIB,但在某个时候,您有一个专用于iPad的XIB,它被编译成了NIB,即使您在项目中删除了XIB文件,编译后的专用于iPad的NIB仍在构建产品中

在任何情况下,请尝试:

  • 清理您的项目,或者更好地清理您的构建产品目录
  • 要执行后者,您可以删除衍生数据文件夹(“管理器”窗口->“项目”选项卡->选择左侧的项目->单击“衍生数据”旁边的“删除”按钮)
  • 从所有模拟器中删除你的应用程序,以防万一
  • 重新构建并运行
如果这不起作用,请提供一些想法,帮助您调试并确定问题是否与使用不同XIB的iPad有关:

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

我遇到了类似的问题,清理了我的项目,删除了派生数据,确保我没有在iPad上使用单独的XIB;似乎什么都没用。原来我的问题非常简单。我是这样初始化我的视图控制器的:

// In Swift
let vc = MyViewController()
不要直接使用nibName:

let vc = MyViewController(nibName: "MyViewController", bundle: NSBundle.mainBundle())

由于我的nil outlet错误似乎只是在iPad上测试时出现的,所以我从未想过要检查控制器是如何初始化的。

在这个特定的情况下,我遇到了一件奇怪的事情。我有一个
UITextField
成为
viewDidLoad
中的第一个响应,我有
NSNotifications
连接到
UITextField
来管理键盘框等。但有趣的是,当通知在
viewDidLoad
中发送时,只有在iPad上,插座是零的(与iPhone不同)。奇怪。

iPhone和iPad有不同的目标吗?如果是这样的话,这个nib是否同时针对这两者?你有这个问题吗