Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.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
Iphone &引用;在应用程序启动结束时,应用程序窗口应具有根视图控制器;仅在iPad上出错_Iphone_Objective C_Uiview_Mainwindow - Fatal编程技术网

Iphone &引用;在应用程序启动结束时,应用程序窗口应具有根视图控制器;仅在iPad上出错

Iphone &引用;在应用程序启动结束时,应用程序窗口应具有根视图控制器;仅在iPad上出错,iphone,objective-c,uiview,mainwindow,Iphone,Objective C,Uiview,Mainwindow,我正在尝试将我的iPhone专用应用程序转换为通用应用程序。我将设备切换到Universal,让Xcode为我制作一个MainWindow-iPad.xib,现在当我在iPhone模拟器中运行该应用程序时,它工作正常,但当我在iPad模拟器中运行它时,我会看到一个白色屏幕,应用程序窗口预计在应用程序启动结束时会有一个根视图控制器。我读过一些关于这个问题的其他帖子,但没有一篇文章只限于一台设备 这是我的应用程序:didFinishLaunchWithOptions:方法: - (BOOL)appl

我正在尝试将我的iPhone专用应用程序转换为通用应用程序。我将设备切换到Universal,让Xcode为我制作一个MainWindow-iPad.xib,现在当我在iPhone模拟器中运行该应用程序时,它工作正常,但当我在iPad模拟器中运行它时,我会看到一个白色屏幕,
应用程序窗口预计在应用程序启动结束时会有一个根视图控制器。我读过一些关于这个问题的其他帖子,但没有一篇文章只限于一台设备

这是我的
应用程序:didFinishLaunchWithOptions:
方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

 /* some dropbox setup stuff */


// INIT VIEW AND CORE DATA
RootViewController *rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];

NSManagedObjectContext *context = [self managedObjectContext];
if (!context) {
    // Handle the error.
}

rootViewController.managedObjectContext = context;

UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
self.navigationController = aNavigationController;

[_window addSubview:[_navigationController view]];
[_window makeKeyAndVisible];

[rootViewController release];
[aNavigationController release];

return YES;
}

编辑:我只有一个根视图控制器,它的大小适合iPhone,名为RootViewController。但它还是应该载入的,不是吗?或者如果不应该,我如何为iPad创建一个呢?

更改以下行:

[_window addSubview:[_navigationController view]];
致:

或者,如果您需要iOS 3兼容性:

if ([_window respondsToSelector:@selector(setRootViewController:)]) {
    _window.rootViewController = _navigationController;
} else {
    [_window addSubview:_navigationController.view];
}

您需要为iPad创建一个带有xib文件的RootViewController,否则会出现此错误。下面是Xcode为universal app提供的模板代码。如果您在iPad模拟器中调试应用程序,并将调试器指向运行“使用iPhone xib文件创建视图控制器”,您将看到确切的错误

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.viewController = [[SYKViewController alloc] initWithNibName:@"SYKViewController_iPhone" bundle:nil];
    } else {
        self.viewController = [[SYKViewController alloc] initWithNibName:@"SYKViewController_iPad" bundle:nil];
    }
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

在iOS 4及更高版本中,
UIWindow
具有可设置的属性
rootViewController
。这是推送应用程序启动时显示的
UIViewController
UINavigationController
。在Xcode IB中,为
UINavigationController
选择初始场景:是初始视图控制器将设置一切,而不需要任何代码。

我尝试了你的建议,但没有一个对我有效,抱歉。:/我最终只是在没有界面生成器的代码中手动创建视图:

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
    // Setup view for iPad
} else
    // Setup view for iPhone and iPod Touch
}
我认为这比实际情况要困难得多


请注意,如果您使用此方法,您仍然可以在interface builder中连接所有内容,如果您希望在iPhone和iPad上都有相同的对象,则只需更改这些块中的对象帧。

在interface builder中生成的MainWindow-iPad.xib中,在IB中添加视图控制器对象,以及视图下方的对象。对于对象,将其类设置为AppDelegate;对于视图控制器,将类设置为ViewController(i标识检查器),并在属性检查器中指定nib名称。您可以查看正在转换的设备的MainWindow.nib以查看差异


编辑:我忘了提到一些重要的步骤。您还需要在IB中将文件的所有者类设置为“UIApplication”,并为应用程序委托和视图控制器适当地设置引用出口。同样,在IB中,最简单的方法是查看主窗口nib的连接检查器并对其进行仿真。如果您有另一个特定于iPad的nib,而不是MainWindow-iPad.nib(即ViewController-iPad.nib),请确保选择其文件的所有者,并将其指向视图,并适当设置其类别。

谢谢,但这不会改变任何事情。还有其他建议吗?太好了。也为我工作。谢谢。傻瓜:还有可能更多
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
    // Setup view for iPad
} else
    // Setup view for iPhone and iPod Touch
}