0

我对 iOS 开发真的很陌生,现在正在学习一些课程来学习它。目标是修复一个由前同事在 2011 年初创建的非常旧的应用程序。我遇到了无法修复的问题。

我想展示一个显示登录屏幕的 ViewController。但是当 ViewController 出现时,它会隐藏在 navigationController 和状态栏下。我也收到此错误:

不鼓励在分离的视图控制器上呈现视图控制器

这是代码:

    Login *fvController = [[Login alloc] initWithNibName:@"Login" bundle:[NSBundle mainBundle]];
    [fvController setTitle:@"Login"];
    UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:fvController];
    [fvController setKc:self];
    [self presentViewController:navCon animated:YES completion:nil];
    [fvController release];
    [navCon release];
    navCon = nil;
    fvController = nil;

有谁能帮助我吗?

提前致谢!

4

2 回答 2

0

发生这种情况是因为您正在释放您创建的 ViewController 实例,请尝试更改如下代码:

在 viewController 顶部的 @implementation 下声明您的 viewController

@implementation yourViewController
{
   Login *fvController;
   UINavigationController *navCon;
}

现在像这样更改您的代码

fvController = [[Login alloc] initWithNibName:@"Login" bundle:[NSBundle mainBundle]];
[fvController setTitle:@"Login"];
navCon = [[UINavigationController alloc] initWithRootViewController:fvController];
[fvController setKc:self];
[self presentViewController:navCon animated:YES completion:nil];

并将您的释放对象添加到 dealloc 方法

- (void)dealloc 
{
    [fvController release];
    [navCon release];
    navCon = nil;
    fvController = nil;
}
于 2014-06-11T20:41:52.847 回答
0

UIWindows 有一个 rootViewController 字段指向层次结构中的第一个视图控制器。如果您从这个层次结构之外的控制器呈现视图控制器,就会发生奇怪的事情。

检查您的密钥窗口 ([yourUIApplication keyWindow]) 是否设置了此字段。如果它是 nil 你的整个层次结构是分离的,它需要重新调整。如果窗口有一个根视图控制器,您可以从这里展示您的视图,同时重构您的层次结构,以便所有视图最终都连接到根。

于 2014-06-11T16:19:07.210 回答