【问题标题】:Using storyboard not XIB files anymore不再使用情节提要而不是 XIB 文件
【发布时间】:2014-11-08 00:01:19
【问题描述】:

另一个问题:

即使使用此代码:我仍然收到

的错误

“应用程序窗口在应用程序启动结束时应该有一个根视图控制器”

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
SliderGaloreViewController *sliderGaloreViewController = [[SliderGaloreViewController alloc] init];
self.window.rootViewController = sliderGaloreViewController;
[self.window makeKeyAndVisible];
return YES;

我现在决定使用故事板而不是许多 XIB 文件,并且我有两段代码给出了 SIGABRT 错误。您能否查看它们并指出如何修复错误。提前致谢!

更新 1: 顺便说一句,错误是:
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“-[UIViewController _loadViewFromNibNamed:bundle:] 加载了“SliderGaloreViewController”笔尖,但未设置视图出口。'

原因 1(在 appdelegate 中):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:     (NSDictionary *)launchOptions
{
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

if ([prefs objectForKey:@"PuzzlePicture"] == nil) {
    [prefs setBool:FALSE forKey:@"Refresh"];
    [prefs setInteger:0 forKey:@"PuzzlePicture"];
    [prefs setBool:TRUE forKey:@"CountMoves"];
    //[prefs setBool:TRUE forKey:@"Timer"];
    [prefs setInteger:1 forKey:@"PuzzleLayoutX"];
    [prefs setInteger:1 forKey:@"PuzzleLayoutY"];
}

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
SliderGaloreViewController *sliderGaloreViewController = [[SliderGaloreViewController   alloc] initWithNibName:@"SliderGaloreViewController" bundle:nil];
self.window.rootViewController = sliderGaloreViewController;
[self.window makeKeyAndVisible];
return YES;
}

原因 2(在 Viewcontroller.m 中):

- (IBAction)showInfo:(id)sender
{
SliderGaloreFlipsideViewController *controller = [[SliderGaloreFlipsideViewController alloc] initWithNibName:@"SliderGaloreFlipsideViewController" bundle:nil];
controller.delegate = self;
controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:controller animated:YES completion:nil];
}

【问题讨论】:

    标签: objective-c xcode storyboard xib


    【解决方案1】:

    initWithNibName 不再用于故事板,完全忘记笔尖。

    SliderGaloreFlipsideView 是标识符,表示您在 XCode 中设计时给出的 storyboardId/

    - (BOOL)application:(UIApplication *)application
                   didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    
    if ([prefs objectForKey:@"PuzzlePicture"] == nil) {
        [prefs setBool:FALSE forKey:@"Refresh"];
        [prefs setInteger:0 forKey:@"PuzzlePicture"];
        [prefs setBool:TRUE forKey:@"CountMoves"];
        //[prefs setBool:TRUE forKey:@"Timer"];
        [prefs setInteger:1 forKey:@"PuzzleLayoutX"];
        [prefs setInteger:1 forKey:@"PuzzleLayoutY"];
    }
    
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    
    SliderGaloreFlipsideViewController *sliderGaloreViewController = 
    (SliderGaloreFlipsideViewController *)[storyboard 
          instantiateViewControllerWithIdentifier:@"SliderGaloreFlipsideView"];
    
    [self.window.rootViewController presentViewController:sliderGaloreViewController 
                                                 animated:NO 
                                               completion:nil];
    
    return YES;
    }
    

    如果您尝试设置根控制器,则删除所有代码并将其设置在情节提要中:

    【讨论】:

    • 等等,我想我明白了。但是,App 委托中的内容是什么?
    • @gjys2000 看到我的编辑,我不知道你这个代码在 appDelaguate 中,Main 是故事板的名称
    • 对不起,是我的错误没有注明。然而,第二个错误原因确实不在情节提要中 - 第一个是。我想知道如何解决第一个错误原因
    • @gjys2000 看看我的编辑
    • 但是现在我有这个错误:警告:尝试在 上显示 其视图不在窗口层次结构中! 2014-09-14 17:07:12.361 SliderGalore 益智游戏[4680:70b] 应用程序窗口预计在应用程序启动结束时有一个根视图控制器
    猜你喜欢
    • 2014-04-10
    • 1970-01-01
    • 2014-08-01
    • 2020-06-02
    • 1970-01-01
    • 2019-01-06
    • 2017-04-06
    • 2012-02-24
    • 1970-01-01
    相关资源
    最近更新 更多