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

eri*_*son 4 iphone xcode objective-c 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];
}
Run Code Online (Sandbox Code Playgroud)

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

欣赏任何见解!

Rob*_*Mao 14

我遇到了同样的问题并花费了一段时间来搞清楚.

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

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

  • 官方的api doc清楚地说明了"loadView"方法:"你的自定义实现方法不应该调用super.". (2认同)

bbu*_*bum 5

设置一个断点viewDidLoad,继续几次,然后抓住回溯并发布它.

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