我的应用程序有一个奇怪的问题。我在运行时使用名为“LoginViewController”的 NIB 加载 VC。该 NIB 有一堆对UIView
放置在 NIB 中的对象的出口,如下所示:
在运行时,我将这些 UIView 对象作为标题动态放置在我的表格视图中。在这种情况下,每个单独UIView
的(除了UITableView
右边的那个)都被设置为像这样的 IBOutlet。当然,每个都有不同的名称:
@property (strong, nonatomic) IBOutlet UIView *connectionInProgressView;
现在,在我的 VCviewDidLoad
方法中,我运行了所有这四个单独的视图,并通过写入日志来确保它们存在:
NSLog(@"connection in progress view: %@", self.connectionInProgressView);
我的问题是:self.connectionInProgressView
在 iPad 上是 nil 而在 iPhone 上不是 nil。无论平台如何,所有其他视图都不是 nil 并且被实例化。我在 iOS 5.0、5.1 和 6.1 的模拟器中运行它。我可以在所有 iPad 模拟器上重现该问题。我的应用程序运行良好,并在 iPhone 上使用微调器加载视图,但在 iPad 上它无法加载该视图,因为它是零!为什么!?
我尝试了以下方法:
- 检查我的 NIB 的文件所有者是否指向正确的视图
- 不
self.connectionInProgressView
指向任何其他 IBOutlet - 检查所有其他子视图是否以与违规视图相同的方式连接。他们是。
- 删除
self.connectionInProgressView
所有 NIB 连接后删除并重新创建它。 - 从视图中删除活动指示器并仅加载带有
UILabel
内部的视图。不走运,它不是活动指示器。 - 检查 VC 中可能引用的任何代码
self.connectionInProgressView
。没有(除了它的 nil 声明viewDidUnLoad
)。 UINavigationController
检查和的 AppDelegate 属性上的属性属性类型LoginViewController
。- 保留一份
LoginViewController
关于 AppDelegate 的副本,尽管这看起来很浪费并且对结果没有任何影响。
[编辑 2]
问题:VC是如何加载的
我的UINavigationController
AppDelegate 上有一个属性。那UINavigationController
是分配初始化的applicationDidFinishLaunchingWithOptions
,我将我的 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,我的 VC 以模态方式包含在其中。我这样做:
if (self.loginViewNavigationController != nil) {
[self.window.rootViewController presentViewController:self.loginViewNavigationController animated:YES completion:nil];
}
我正在疯狂地试图确定为什么这个特定的视图拖到我的 NIB 上并与所有其他视图一样连接起来,在 iPad 上是 nil 而不是在 iPhone 上是 nil。
[编辑 1] 在搜索重复问题时,我没有找到这个:
我并不孤单!
有任何想法吗?