Почему я получаю «нераспознанный селектор, отправленный на экземпляр»? - PullRequest
3 голосов
/ 10 февраля 2012

У меня проблема со вторым учебным приложением на сайте Apple Tut В основном классе я получаю ошибку.

Код:

#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

РЕДАКТИРОВАТЬ на основе комментария:

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

Ответы [ 2 ]

3 голосов
/ 10 февраля 2012

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


Отредактировано на основе журнала
Измените ваш метод на

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

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

            return YES;
        }
0 голосов
/ 29 июня 2012

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

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

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

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