我正在尝试在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时,它似乎都会返回到顶部并再次执行整个操作。我有点困惑,因为我在我所遵循的教程上几乎完全相同地使用了这个代码,它运行得很漂亮......这让我觉得问题必须在其他地方,尽管我不可能想到在哪里。
欣赏任何见解!
答案 0 :(得分:14)
我遇到了同样的问题,花了一些时间来计算。
当self.view不存在时,iOS将调用loadview / viewdidload并尝试创建视图。这导致死循环。在我的情况下,我没有在我的loadView中调用[super loadView],并导致此问题。
答案 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
中访问它,也会发生这种情况
您必须重命名该属性。