我在UISplitViewController
上使用ARC
。
我在AppDelegate
中设置了控制器,然后将其设为rootViewController
。我已确保将其设为property
:
@property (strong, nonatomic) UISplitViewController *splitViewController;
使用viewControllers
属性设置根和详细信息在首次创建时可以正常工作。并且在第二次设置时它再次正常工作,但是第三次尝试设置viewControllers
属性时我遇到了崩溃。
以下是我设置的方法:
Screens *edit = [[Screens alloc] initWithStyle:UITableViewStyleGrouped];
UINavigationController *c = [[UINavigationController alloc] initWithRootViewController:edit];
if ([Utility isIpad]) {
Map *a = (Map *)[[MyAppDelegate instance].splitViewController.viewControllers objectAtIndex:0];
NSArray *viewControllers = [NSArray arrayWithObjects:a, c, nil];
UISplitViewController *splitView = [MyAppDelegate instance].splitViewController;
splitView.viewControllers = viewControllers;// <--- Crashes here
} else {
[self presentModalViewController:c animated:YES];
}//end
当我尝试设置viewControllers
属性时,为什么会崩溃?它似乎已经发布,但我知道splitViewController
仍在那里......
这可能与ARC有关吗?
Stacktrace:
答案 0 :(得分:8)
我刚才遇到了同样的错误。在我的情况下,问题是我最初设置详细视图控制器是UISplitViewController
的委托。然后我重构使根视图控制器处理事情,但我忘了从.xib
文件中删除连接。
所以,当我第一次设置splitView.viewControllers
时,一切都有效,但是我的原始细节控制器会被释放,而UISplitViewController
会留下一个错误的指针delegate
。下次我设置viewControllers
属性时,UISplitViewController
试图通过指针调用其委托并崩溃。
您写道,您在应用代理中设置了控制器,因此这可能与您遇到的问题完全不同。不过,请仔细检查以确保delegate
的{{1}}属性设置正确!