iOS Xcode 4 UINavigationController - PullRequest
       18

iOS Xcode 4 UINavigationController

0 голосов
/ 09 февраля 2012

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

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];
}

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

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

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

Если вы хотите добавить 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?

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

1 голос
/ 09 февраля 2012

«Обычный» способ инициализации window выглядит следующим образом:

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

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

rootViewController.window = window;

, а затем

window.rootViewController = rootViewController; ???

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

...