2013-02-20 78 views
3

我有一个奇怪的问题与我的应用程序。我在运行时加载一个名为“LoginViewController”的NIB。这NIB有一堆网点,以UIView对象放置在NIB像这样:笔尖UIView在iPad上无,而不是在iPhone上无

enter image description here

在运行时动态我把这些UIView的对象为在我的表视图头。在这种情况下,每个单独的UIView(右边的UITableView除外)都被设置为IBOutlet。每个人都有,当然不同的名称:现在

@property (strong, nonatomic) IBOutlet UIView *connectionInProgressView; 

,在我的VC的viewDidLoad方法我经历的这些独立意见全部四个运行,并确保通过写日志它们存在:

NSLog(@"connection in progress view: %@", self.connectionInProgressView); 

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

我曾尝试以下:

  • 检查我的NIB的文件的所有者指向正确的观点
  • self.connectionInProgressView不指向任何其他IBOutlet中
  • 检查所有其他子观点与违规观点相同。他们是。删除其所有NIB连接后
  • 删除self.connectionInProgressView并重新创建它。
  • 卸下从视图和装载只是一个带UILabel内部视图中的活动的指标。没有运气,它不是活动指标。
  • 检查VC中可能引用self.connectionInProgressView的任何代码。没有(除了在viewDidUnLoad的零声明)。
  • 检查财产属性上UINavigationControllerLoginViewController我的AppDelegate属性类型。
  • 保留的LoginViewController在AppDelegate中的副本,虽然这似乎是浪费,并没有做出结果的差异。

[编辑2]

问:如何是VC加载

我有一个UINavigationController那是我的AppDelegate的属性。那UINavigationController是在applicationDidFinishLaunchingWithOptions 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上,即使我将在后面UINavigationController表现为模式窗体片在iPad上(不知道这是有利于我的问题)。

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

if (self.loginViewNavigationController != nil) { 

    [self.window.rootViewController presentViewController:self.loginViewNavigationController animated:YES completion:nil]; 
} 

我要去疯狂试图确定为什么这一个特定视图拖动到我的笔尖和有线起来一样所有其他是零,在iPad上,而不是零iPhone上。

[编辑1] 当搜索一个重复的问题,我没能找到这样的:

A few IBOutlets pointing to nil

我并不孤单!

任何想法?

+0

你对iPhone和iPad有单独的目标吗?如果是这样的话,那么这个笔尖呢?只有用这个笔尖才有这个问题(不适用于iPad)?还是跨越所有的笔尖? – 2013-02-20 22:19:49

+0

不,我正在构建一个通用二进制文件。 NIB只针对一个目标。我只对这个特定的NIB有这个问题。 – Aaron 2013-02-20 22:24:11

+0

viewDidUnload永远不会被调用。摆脱它。 – matt 2013-02-20 22:38:04

回答

5

当您构建通用应用程序时,您确定您没有为iPhone和iPad创建单独的NIB(通常为LoginViewController.xibLoginViewController~ipad.xib)?

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

在任何情况下,尝试:

  • 清理项目,甚至更好,你构建产品目录
  • 要做到后者,你可以删除你的导出数据文件夹(“管理”窗口 - >“项目”选项卡 - >在左侧选择您的项目 - >点击“派生数据”旁边的“删除”按钮)
  • 从所有模拟器中删除您的应用程序,只需确保
  • 构建和运行再次

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

  • 你可以尝试像修改您的厦门国际银行的另一IBOutlet一些测试,例如断开其他IBOutlet之一,而不是nil与它在XIB中连接的视图之间的连接,以便当您再次运行应用程序时,此时应记录为nil。如果它是iPhone模拟器上的nil(正如你刚刚断开连接一样)...但在iPad模拟器上仍然不是nil,那么它肯定意味着你使用了不同的XIB文件用于iPhone和iPad。
  • 您还可以在XIB中更改您的UIView的正确连接到您的IBOutlet之一的颜色,并查看更改是反映在iPhone和iPad上还是仅反映在iPhone上,因此请检查此XIB您正在编辑是否与iPad中使用的相同。
+0

阿里 - 我会贯穿你的建议。要回答你的第一个问题,我有一个完全独立的表格单元格问题,我想我可以通过挂接〜ipad.xib来解决这个问题。我试过了,它没有工作,然后我删除了〜ipad.xib。我已经多次清理了这个项目,但都无济于事。 – Aaron 2013-02-20 22:52:08

+0

你还重置了模拟器吗? – Rog 2013-02-20 22:57:31

+0

@Rog - 你重置模拟器意味着什么。我对iOS开发还比较陌生,所以我可能会漏掉一些明显的东西。 – Aaron 2013-02-20 23:02:56

1

我有一个类似的问题,清理我的项目,删除派生数据,确保我没有使用单独的iPad的iPad;似乎没有任何工作。原来我的问题非常简单。我的init-ING我的视图控制器像这样:

// In Swift 
let vc = MyViewController() 

,而不是直接使用nibName:

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

由于在iPad上进行测试时,我的零出口的错误似乎只上来了,我从来没有认为要检查控制器是如何初始化的。