【发布时间】:2014-07-07 16:58:20
【问题描述】:
我现在正在构建一个应用程序,95% 的应用程序基于 SplitViewController,它从另一个视图控制器的字符串中加载 tableView 内容。现在我的初始视图控制器是SplitViewController,但是一旦我改变它,这个代码就会导致我的AppDelegate.m出现问题:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
UISplitViewController *splitviewController = (UISplitViewController *)self.window.rootViewController;
UINavigationController *navigationController = [splitviewController.viewControllers lastObject];
splitviewController.delegate = (id)navigationController.topViewController;
return YES;
}
如果我删除它,SplitViewController 显然无法正常工作。我试过这个,只是想看看其他一切是否可行;新的初始视图控制器已成功加载 - 但是一旦我按下一个按钮以再次模态到SplitViewController,此代码将归咎于以下消息:
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
例外情况
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“应用程序试图以模态方式呈现拆分视图控制器。”
关于如何解决这个问题的任何想法?非常感谢您的帮助!
编辑:
我发现了这个: 将您的 splitView 设置为您的应用程序的 rootView,在启动时以模态方式呈现您的 singleView,并且只要您想关闭它以让 splitView 拥有控制权。与让您的 singleView 呈现 splitView 具有相同的效果。
我也是这么想的。这是一个可行的解决方案吗?苹果会在测试期间批准它吗?
【问题讨论】:
-
这行代码
splitviewController.delegate = (id)navigationController.topViewController;可能是导致您的问题的原因。据我所知,这并没有给你设置splitViewControllers 代表。尝试将您的delegate分配到您的viewController而不是AppDelegate
标签: ios objective-c uiviewcontroller uisplitviewcontroller