«Завершение работы приложения из-за необработанного исключения» .. ему не удалось найти MainWindow, которого больше не существует - PullRequest
2 голосов
/ 17 июня 2011

Некоторое время назад я удалил все свои файлы .xib, а недавно изменил свой идентификатор. Теперь он начал давать мне эту ошибку:

Завершение работы приложения из-за отсутствия связи исключение 'NSInternalInconsistencyException', причина: «Не удалось загрузить NIB в комплекте: «NSBundle (загружен) 'с именем 'MainWindow' '

MainWindow было удалено некоторое время назад, и удаление MainWindow из информации о развертывании означает, что у меня просто черный экран. Вот код, который у меня есть в моем делегате приложения:

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

    [application setStatusBarStyle:UIStatusBarStyleBlackOpaque];
    [window addSubview:navigationController.view];
    [self.window makeKeyAndVisible];

    return YES;
}

Я что-то упустил? Я предполагаю, что должен удалить MainWindow, но, как я сказал, это просто дает мне черный экран.

1 Ответ

6 голосов
/ 17 июня 2011

Вы получаете эту ошибку, потому что значение NSMainNibFile установлено в вашем Info.plist.Он говорит ОС открыть этот файл NIB при запуске.Поскольку по какой-то причине вы покончили с NIB s, вам придется заполнить созданные вами отверстия, удалив файл NIB.

  1. Вы должны удалитьключ от Info.plist.
  2. Вы должны внести некоторые изменения в свой main.m.Обычно MainWindow.xib содержал информацию о вашем делегате приложения, но теперь вам нужно предоставить ее.Найдите строку, которая гласит int retVal = UIApplicationMain(argc, argv, nil, nil);, и замените ее на int retVal = UIApplicationMain(argc, argv, nil, @"yourDelegateClassName");

  3. То, что вы сделали до сих пор, создаст экземпляр делегата приложения, и ваш application:didFinishLaunchingWithOptions: будет вызван, но ваш window еще не установлен, так как он снова был обработан файлом NIB.Это будет распространяться на все ваши торговые точки.Не только ваше `окно.

Вы должны будете сделать некоторые дополнения к вашему application:didFinishLaunchingWithOptions: методу, подобному этому,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    // Instantiate Window
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

    // Instantiate Root view controller
    RootViewController * viewController = [[[RootViewController alloc] init] autorelease];

    // Instantiate navigation controller
    navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

    [application setStatusBarStyle:UIStatusBarStyleBlackOpaque];
    [window addSubview:navigationController.view];
    [self.window makeKeyAndVisible];

    return YES;
}

Вышеуказанный метод является просто шаблономи должны быть изменены в соответствии с вашими требованиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...