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上它无法加载该视图,因为它是零!为什么!?
我尝试过以下方法:
self.connectionInProgressView并不指向任何其他IBOutletself.connectionInProgressView所有NIB连接后删除并重新创建它.UILabel内部视图.没有运气,它不是活动指标.self.connectionInProgressView.没有(除了它的nil声明viewDidUnLoad).UINavigationController和LoginViewController.LoginViewControllerAppDelegate 的副本,虽然这看起来很浪费,并没有对结果产生影响.[编辑2]
问题:如何加载VC
我有一个UINavigationController是我的AppDelegate的属性.这UINavigationController是applicationDidFinishLaunchingWithOptions我通过我的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]在搜索重复的问题时,我没有找到:
我并不孤单!
有任何想法吗?
当你正在构建一个通用的应用程序,你确定你没有iPhone和iPad(创建一个单独的NIB LoginViewController.xib和LoginViewController~ipad.xib一般)?
或许你认为你只有一个XIB,但在某些时候你有一个专用的XIB for iPad编译成NIB,即使你删除了项目中的XIB文件,专用于iPad的编译NIB仍然在构建产品中.
在任何情况下,尝试:
如果这不起作用,一些想法可以帮助您调试并确定问题是否与使用不同XIB的iPad相关:
IBOutletXIB,例如断开其中一个IBOutlet不是nil来自XIB中连接的视图,这样当您再次运行应用程序时,应该记录下来nil.如果它nil在iPhone模拟器上(正如你刚刚断开它的预期那样)......但仍然不在niliPad模拟器上,那么它肯定意味着你为iPhone和iPad使用不同的XIB文件.UIView正确连接到您的一个的颜色IBOutlet,并查看更改是反映在iPhone和iPad上还是仅反映在iPhone上,因此请检查您正在编辑的此XIB是否相同用于iPad或不用.