- viewDidLoad无限循环问题...(iOS)

时间:2011-02-13 18:46:38

标签: iphone objective-c xcode ipad ios

我正在尝试在iOS中编写一个多视图应用程序并且真的有点困难...我已经设置了一个新项目,我有一个由appDelegate启动的rootViewController。反过来,rootViewController尝试加载并显示我的第一个内容视图,虽然我似乎陷入了某种无限循环,但我希望有人可以预感到为什么......

    -(void)viewDidLoad
{   
    // Load up new instance of view
    TopLevelViewController *topLevelController = 
    [[TopLevelViewController alloc] initWithNibName:@"TopLevelView" bundle:nil];

    // Hand off viewController reference to root controller
    self.topLevelViewController = topLevelController;

    // Display the view
    [self.view insertSubview:topLevelController.view atIndex:0];

    // Release viewController
    [topLevelController release];


    [super viewDidLoad];
}

上面是我的rootViewController viewDidLoad:方法,虽然每次执行insertSubview时,它似乎都会返回到顶部并再次执行整个操作。我有点困惑,因为我在我所遵循的教程上几乎完全相同地使用了这个代码,它运行得很漂亮......这让我觉得问题必须在其他地方,尽管我不可能想到在哪里。

欣赏任何见解!

8 个答案:

答案 0 :(得分:14)

我遇到了同样的问题,花了一些时间来计算。

当self.view不存在时,iOS将调用loadview / viewdidload并尝试创建视图。这导致死循环。在我的情况下,我没有在我的loadView中调用[super loadView],并导致此问题。

参见此讨论 http://forums.macrumors.com/showthread.php?t=552520

答案 1 :(得分:5)

viewDidLoad上设置断点,继续几次,然后抓住回溯并发布。

另外,将NSLog(@"%@ self is %p", NSStringFromSelector(_cmd), self);添加到viewDidLoad的开头。可能是你创建了一种nib文件的“无限镜像”配置;如果十六进制数不断变化,则视图的实例将不同。

答案 2 :(得分:2)

我知道这听起来很简单,但尝试移动

[super viewDidLoad]

到代码的顶部。我有一种感觉,超级必须是你打电话的第一件事。

答案 3 :(得分:1)

刚才意识到在最近的兴趣之后我从未关闭过它。

我记得,@ Wolfgang Schreurs是完全正确的。无论出于何种原因,在尝试使用代码时,我topLevelViewController继承了rootViewController

希望这可以帮助其他可能遇到同样问题的人。

答案 4 :(得分:0)

尝试[self.view addSubview:topLevelController.view]

答案 5 :(得分:0)

设置断点并查看循环运行的位置......

答案 6 :(得分:0)

我删除了loadView方法并为我修复了它,如果你的.m文件中有这个方法就删除它!!

答案 7 :(得分:0)

如果您制作@property (nonatomic, strong) UIView *loadView并在viewDidLoad中访问它,也会发生这种情况 您必须重命名该属性。