2012-02-10 3 views
3

У меня проблема со вторым учебным пособием для приложения в apple tut site. В основном классе я получаю сообщение об ошибке.Почему я получаю «непризнанный селектор, отправленный экземпляру»?

Код:

#import "birdwatchingAppDelegate.h" 

int main(int argc, char *argv[]) { 
    @autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([birdwatchingAppDelegate class])); 
    } } 

Ошибка:

[birdwatchingViewController viewControllers]: unrecognized selector 
sent to instance 0x6d37000' 

Ниже где расположение ошибки:

import "birdwatchingAppDelegate.h" 
     #import "BirdSightingDataController.h" 
     #import "birdwatchingViewController.h" 

     @implementation birdwatchingAppDelegate 

     @synthesize window = _window, dataController = _dataController, firstViewController = _firstViewController; 

     - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
     { 
      UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController; 
      birdwatchingViewController *firstViewController = (birdwatchingViewController *)[[navigationController 
    viewControllers] objectAtIndex:0]; 

      BirdSightingDataController *aDataController = [[BirdSightingDataController alloc] init]; 
      firstViewController.dataController = aDataController; 

      return YES; 
     } 

и точная линия, которая вызывает проблемы является:

birdwatchingViewController *firstViewController = (birdwatchingViewController *)[[navigationController 
    viewControllers] objectAtIndex:0]; 

Я не могу найти проблему, может ли кто-нибудь помочь?

спасибо ..

EDIT:

путем добавления NSLog я получил следующее:

2012-02-10 11:24:06.059 Birdwatching[3057:f803] birdwatchingViewController 
2012-02-10 11:24:06.060 Birdwatching[3057:f803] -[birdwatchingViewController viewControllers]: unrecognized selector sent to instance 0x6878250 

EDIT на основе комментариев:

2012-02-10 11:51:20.696 Birdwatching[3152:f803] navi : <birdwatchingViewController: 0x6a49c20> 
+0

добавить эту строку до строки с крахом - NSLOG (@ "% @", [[navigationController class] description]); – NeverBe

+2

Пожалуйста, сделайте сами и сделайте коллегам пользу и придерживайтесь соглашений об именах: имена классов должны начинаться с символов верхнего регистра, как в 'BirdwatchingViewController' и' BirdwatchingAppDelegate'. То же самое верно для всех настраиваемых типов (например, перечислений). Переменные и методы должны начинаться с символов нижнего регистра. – DarkDust

ответ

3

это потому, что self.window.rootViewController не UINavigationController это может быть просто UIViewcontroller


EDITED основан на журнал
изменения вашего метода

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
     { 
      birdwatchingViewController *firstViewController = (birdwatchingViewController *)self.window.rootViewController; 

      BirdSightingDataController *aDataController = [[BirdSightingDataController alloc] init]; 
      firstViewController.dataController = aDataController; 

      return YES; 
     } 
+0

Хмм ... Я все еще не могу заставить его работать, такая же ошибка. – Roskvist

+0

напечатайте описание объекта 'navigationController' i.e.'NSLog (@" navi:% @ ", navigationController);' после 'UINavigationController * navigationController = (UINavigationController *) self.window.rootViewController;' и опубликовать журнал в вашем ответе. –

+0

Я добавил журнал – Roskvist

0

Я просто боролся с той же проблемой в этом упражнении на некоторое время, и так как реальный ответ нигде не было быть нашел, что я столкнулся с этим вопросом, чтобы другие могли его найти.

Помимо проблемы, о которой упоминалось выше, у меня также было два других таинственных после начала с нуля.
Каждый раз, когда причина заключалась в том, что некоторая ценность в разделе «Утилиты» была неправильной, хотя я мог бы поклясться, что я установил ее раньше!
Если это происходит с другими, убедитесь, что Class (в Инспекторе идентификации) и Identifier (в инспекторе атрибутов) по-прежнему имеют правильные значения для объектов GUI, после, вы завершаете ввод всего кода.

Не знаю, есть ли в Xcode какие-то неожиданные ситуации, когда они не сохраняют ваши значения или молча возвращают их позже, или если я просто слишком новичок в этой среде, чтобы отслеживать, что я делаю в ней. :)

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