Проблема с загрузкой контроллера представления в проект Core Data

#objective-c #cocoa-touch #ios #core-data #xcode4

#objective-c #cocoa-touch #iOS #core-data #xcode4

Вопрос:

Я только недавно начал учиться использовать core data в XCode 4, и у меня возникла очень странная проблема с загрузкой моего первого контроллера представления из делегата приложения в core data projects. Я действительно не уверен, что я делаю неправильно, только то, что то, что я делаю, работает очень хорошо, когда core data не реализован, но не тогда, когда это так.

Я обнаружил, что происходит то, что AppDelegate загрузится, а затем начнет загружать контроллер представления (я могу заставить его регистрировать, что он прошел через метод initWithNibName). Но затем контроллер представления исчезает, и все, что я вижу, это главное окно. В журнале ошибок нет ошибок, сгенерированных.

Вот соответствующий код из AppDelegate

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // other code here

    UINavigationController *navigationController = [[[UINavigationController alloc]  init] autorelease];

    HomeViewController *viewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
    viewController.title = @"My Company";
    [navigationController pushViewController:viewController animated:NO];

    [window addSubview:navigationController.view];

    [viewController release];

    [self.window makeKeyAndVisible];
    return YES;
}
  

На данный момент в контроллере представления в основном есть только заглушки, но я могу опубликовать любой из методов по запросу. Заранее благодарю вас за вашу помощь.

ОБНОВЛЕНИЕ: Что ж, я наконец-то заставил это работать самостоятельно, хотя я не уверен, почему это сработало. Все, что я сделал, это удалил контроллер навигации как свойство делегата приложения и автоматически выпустил его при инициализации alloc в методе didFinishLaunchingWithOptions. После этого все заработало нормально. Опубликованный выше код — это то, что в конечном итоге сработало. Как ни странно, я попробовал то же самое в другом проекте, над которым я работаю, и это не сработало в этом.

Вот код из второго проекта

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UINavigationController *navigationController = [[[UINavigationController alloc]  init] autorelease];
    StartViewController *viewController = [[StartViewController alloc] initWithNibName:@"StartViewController" bundle:nil];

    [navigationController setNavigationBarHidden:YES];
    [navigationController pushViewController:viewController animated:NO];

    [window addSubview:navigationController.view];
    [viewController release];

    [self.window makeKeyAndVisible];
    return YES;
}
  

Ответ №1:

Попробуйте что-нибудь другое, подобное этому:

 -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  HomeViewController *viewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
  viewController.title = "My Company";
  [navigationController pushViewController:viewController animated:NO];

  [viewController release];

  [window addSubview:navigationController.view];
  [self.window makeKeyAndVisible];
  return YES;
}
  

Комментарии:

1. @Carlton Smith: Вопрос! NavigationController где вы его определяете? связано ли это с IBOutlet ?

2. Если вы посмотрите на код, размещенный там сейчас, это то, над чем я, наконец, приступил к работе. Я не подключил навигационный контроллер к IBOutlet.