2012-02-09 3 views
0

Моя программа отлично работает в IOS 4/Xcode 3. Я недавно обновлен до последней версии Xcode 4/IOS 5. Я получаю "SIGABRT" на следующей строке:IOS Xcode 4 UINavigationController

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController]; 

Эта строка в приложении завершила запуск в делегате. Вот пример кода:

- (void)applicationDidFinishLaunching:(UIApplication *)application { 

    rootViewController = [[MyCustomViewController alloc] initWithStyle:UITableViewStylePlain]; 
    rootViewController.window = window; 
    window.rootViewController = rootViewController; 

    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController]; 

    [window addSubview:[navigationController view]]; 

    [window makeKeyAndVisible]; 
} 

Любая помощь приветствуется.

+0

Невозможно диагностировать это без дополнительного кода. Что-то, вероятно, не так, когда вы инициализируете rootViewController. – danielbeard

+0

К сожалению, добавлен еще код. – user1120008

ответ

1

"Нормальный" способ инициализации window, как это:

window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
window.rootViewController = [Myclass alloc] init... 

Вы делаете это наоборот с

rootViewController.window = window; 

, а затем

window.rootViewController = rootViewController; ??? 

ли что действительно работать со старым xcode?

2

Это довольно странно, как использовать свой метод applicationDidFinishLaunching.

Если вы wanto добавить UINavigationController как rootViewController для window, а затем инициализировать эту навигацию контроллер с экземпляром MyCustomViewController сделать следующее:

- (void)applicationDidFinishLaunching:(UIApplication *)application { 

    // code for creating a window 
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 

    MyCustomViewController* myCustomViewController = [[[MyCustomViewController alloc] initWithStyle:UITableViewStylePlain] autorelease]; 

    UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:myCustomViewController] autorelease]; 

    self.window.rootViewController = navigationController; 

    [self.window makeKeyAndVisible]; 
} 

window в пределах вашего приложения делегат .h, как

@property (nonatomic, strong) UIWindow* window; // using ARC 

или

@property (nonatomic, retain) UIWindow* window; // using not ARC 

Свойство также синтезируется в прикладном делегатом .m как

@synthesize window; 

Некоторые замечания:

При использовании window.rootViewController вам не нужно звонить [window addSubView:someview]. Он уже обработан для вас iOS 4.

Вы уверены, что ваш код работает в старых sdks?

Надеюсь, это поможет.

+0

Почему вы делаете 'return YES' в' void' методе? – Eimantas

+0

@ Eimantas Я исправил его, спасибо. Я ошибся, потому что думал, что это написано: - (BOOL) приложение: (UIApplication *) приложение didFinishLaunchingWithOptions: (NSDictionary *) launchOptions'. Приветствия. –

Смежные вопросы