Objective c 设置窗口根视图控制器访问错误,没有堆栈跟踪
编辑:这似乎是我犯的一个愚蠢的错误,在我处理之前,我提前收到了一个轮换更改通知。这引起了连锁反应,在某个不知名的地点发生了车祸。让我看看如何关闭/删除此问题 我的应用程序已经运行了一段时间,但我今天决定最终“正确”地实现它,即:使用视图控制器,而不是手动将单个视图添加到UIWindow。在我尝试将window.rootViewController设置为我的视图控制器之前,这一过程相当顺利 在ApplicationIDFinishLaunchingWithOptions之后的某个地方,它因访问错误而崩溃。没有有用的stacktrace(它在程序集中崩溃),我也看不到它回到我的代码中的任何地方(我到处都放着日志)。只需将viewcontroller的视图添加到主窗口即可。这是代码的一部分:Objective c 设置窗口根视图控制器访问错误,没有堆栈跟踪,objective-c,ios,uiviewcontroller,automatic-ref-counting,Objective C,Ios,Uiviewcontroller,Automatic Ref Counting,编辑:这似乎是我犯的一个愚蠢的错误,在我处理之前,我提前收到了一个轮换更改通知。这引起了连锁反应,在某个不知名的地点发生了车祸。让我看看如何关闭/删除此问题 我的应用程序已经运行了一段时间,但我今天决定最终“正确”地实现它,即:使用视图控制器,而不是手动将单个视图添加到UIWindow。在我尝试将window.rootViewController设置为我的视图控制器之前,这一过程相当顺利 在ApplicationIDFinishLaunchingWithOptions之后的某个地方,它因访问错误
-(BOOL) application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
....
self.window = [[UIWindow alloc] initWithFrame: [UIScreen mainScreen].bounds];
self.viewController = [[MainViewController alloc]init];
// if i uncomment this it crashes:
// self.window.rootViewController = self.viewController;
[self.window addSubview: viewController.view]; // Commented out if i use the rootViewController
[self.window makeKeyAndVisible];
NSLog(@"Did finish launching");
return YES;
}
我尝试过很多调试方法(stacktrace不存在,手动执行代码需要很长时间,崩溃前不会调用日志),但我找不到问题。它在libobjc.A.dylib'objc\u retain:
中崩溃,堆栈跟踪中唯一的其他内容是objc\u storeStrong
。这不是一个保留/释放问题(至少不是直接的),因为我使用的是ARC。最后一个NSLog被调用,如果我手动执行,它将退出didFinishLaunching
我可以在不设置根视图控制器的情况下让应用程序正常工作,但重做这部分的全部目的是“正确”地完成所有事情(例如,在没有根视图控制器的情况下,旋转必须相对粗糙)
所以,请告诉我你有一些想法!因为这让我抓狂:S你不需要这样做:
[self.window addSubview: viewController.view];
将视图控制器设置为根视图控制器时,其视图已成为窗口的子视图
编辑
然而,这不会引起任何问题
也许问题不在代码中。有时我的应用程序也会崩溃,我很生气。通常情况下,这是因为我从另一个文件夹中拖动项目,xcode发现权限有问题,或者由于其他(对我来说)未知的原因
尝试用alt+cmd+k清理项目。如果这不起作用,您可能会遇到权限问题。因此,创建另一个项目并复制您写入其中的所有文件。这似乎是我犯的一个愚蠢的错误,我在处理之前过早收到了rotationChanged通知。这引起了连锁反应,在某个不知名的地点发生了车祸。无论如何,谢谢你的帮助 如果我使用rootviewcontroller,我会将其注释掉,很抱歉没有明确说明这一点。将编辑我的问题。您是否尝试过只设置self.window.rootViewController=[[MainViewController alloc]init]?现在我尝试了,但不起作用。谢谢你的想法,但轮换变更通知?你能详细说明一下吗?虽然这篇文章已经有4年多的历史了,但我相信是这样的通知:。在该事件的处理程序中,我尝试更改或设置一些尚未初始化的内容。