首页 文章

应用程序显示旧XIB而不是故事板

提问于
浏览
0

我正在更新一个使用XIB文件但希望转换为Storyboard的旧iOS项目 . 我创建了Storyboard,将其与相应的ViewControllers连接,删除了我可以找到的任何对XIB文件的引用,并设置项目的主界面以使用我的Storyboard .

但是,当我运行我的应用程序时,它仍然显示XIB文件而不是使用故事板;好像还有一些东西仍在引用它们 . 显示Storyboard的唯一一个是初始场景/ ViewController(它很可能是因为它是一个新创建的ViewController) .

我在网上看过其他解决方案,但无济于事 . 我试过了:

  • 清理项目

  • 删除DerivedData文件夹

  • 重新启动Xcode和我的电脑

  • 更新了MyApplication-info.plist

  • 从XIB文件中删除了对ViewControllers的引用

  • 尝试从项目中删除XIB文件(由于文件丢失,它将显示黑屏)

原始项目目标是iOS 5.1,新的6.0,我正在使用Xcode 5.我可能会遗漏任何东西吗?

Edit: 我没有以编程方式与其他控制器进行隔离;我有故事板处理这个 . 我在第一个ViewController中唯一做的就是将字符串文本发送到下一个:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NextViewController *   nextController;

    if ([[segue identifier] isEqualToString:@"SegueToNext"])
    {
        nextController = [segue destinationViewController];
        [nextController initWithTitle:@"New"];
    }
}

Edit: 这是显示XIB文件而不是Storyboard的ViewController的代码 . 如您所见,没有与加载/推送新控制器或与XIB相关的任何内容相关的调用 .

#import "NextViewController.h"

@interface NextViewController ()

@end

@implementation NextViewController


-(id) initWithTitle:(NSString *) title
{
    self = [super init];
    if (self)
    {
        self.title = title;

        // Load the dictionary
        self.dictionary = [NSDictionary dictionaryWithContentsOfFile:
            [[NSBundle mainBundle] pathForResource:@"NewDictionary"
            ofType:@"plist"]];
    }

    return self;
}


-(void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    // Render new slide
    [self renderOpening];
}


-(void) viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}


-(void) renderOpening
{
    // 1st slide
    NSLog(@"renderOpening");

    // Initial settings for opening slide; all are UIOutlets (UIButton, UIImageView)
    back.hidden = YES;
    diagram.hidden = YES;
    next.hidden = NO;
    text.hidden = NO;
    avatar.hidden = NO;

    avatar.image = [[UIImage imageNamed:@"avatar"]
        rescaleImageToSize:CGSizeMake(150, 150)];

    text.text = @"Hello World";
}

@end

2 回答

  • 0

    在appDelegate类文件中,删除任何指示应用程序启动到旧的初始xib的代码 . (来自didFinishLaunching'方法)你不需要用任何代码替换它来启动故事板,因为这会从“开发信息”部分选择它 - 见下文 .

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    

    然后单击您的项目并在“开发信息”部分的“常规”选项卡下,确保选择故事板作为主界面 - 请参见下图 .

    enter image description here

    此外,如果您从故事板中选择希望应用程序最初开始的视图控制器并选择它 . 然后转到RHS实用程序区域并确保选择“初始场景[]是初始视图控制器块”,请参见图片 .

    enter image description here

    我希望这有帮助,

    干杯

    吉姆

  • 0

    在我正在讨论的ViewController中,我调用了一个自定义函数,该函数返回对ViewController类本身新创建的对象的引用:

    -(id) initWithTitle:(NSString *) title
    {
        self = [super init];
        if (self)
        {
            self.title = title;
    
            // Load the dictionary
            self.dictionary = [NSDictionary dictionaryWithContentsOfFile:
                [[NSBundle mainBundle] pathForResource:@"NewDictionary"
                ofType:@"plist"]];
        }
    
        return self;
    }
    

    它是从旧代码中留下的,我完全忽略了它 . 现在我不再需要使用Storyboard了 . 因此,它没有看到我正在进行的ViewController,而是显示了旧的XIB文件 . 从项目中删除XIB文件显示一个空的黑色视图,删除代码 [super init] 显示正确的Storyboard ViewController .

    虽然我得到它的工作,我仍然不确定为什么它显示旧的XIB文件,即使我删除了它的引用 .

相关问题