Ошибка времени выполнения при попытке создать простое приложение для iOS на основе UITabBarController - PullRequest
0 голосов
/ 26 апреля 2011

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

Вот ошибка времени выполнения:

2011-04-25 23:56:40.689 Noun[39033:207] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NounAppDelegate 0x4e1c400> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key viewController.'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00dc75a9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x00f1b313 objc_exception_throw + 44
    2   CoreFoundation                      0x00dc74e1 -[NSException raise] + 17
    3   Foundation                          0x0002f677 _NSSetUsingKeyValueSetter + 135
    4   Foundation                          0x0002f5e5 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285
    5   UIKit                               0x004b330c -[UIRuntimeOutletConnection connect] + 112
    6   CoreFoundation                      0x00d3d8cf -[NSArray makeObjectsPerformSelector:] + 239
    7   UIKit                               0x004b1d23 -[UINib instantiateWithOwner:options:] + 1041
    8   UIKit                               0x004b3ab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168
    9   UIKit                               0x002b917a -[UIApplication _loadMainNibFile] + 172
    10  UIKit                               0x002b9cf4 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 291
    11  UIKit                               0x002c4617 -[UIApplication handleEvent:withNewEvent:] + 1533
    12  UIKit                               0x002bcabf -[UIApplication sendEvent:] + 71
    13  UIKit                               0x002c1f2e _UIApplicationHandleEvent + 7576
    14  GraphicsServices                    0x0171f992 PurpleEventCallback + 1550
    15  CoreFoundation                      0x00da8944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
    16  CoreFoundation                      0x00d08cf7 __CFRunLoopDoSource1 + 215
    17  CoreFoundation                      0x00d05f83 __CFRunLoopRun + 979
    18  CoreFoundation                      0x00d05840 CFRunLoopRunSpecific + 208
    19  CoreFoundation                      0x00d05761 CFRunLoopRunInMode + 97
    20  UIKit                               0x002b97d2 -[UIApplication _run] + 623
    21  UIKit                               0x002c5c93 UIApplicationMain + 1160
    22  Noun                                0x00001e68 main + 102
    23  Noun                                0x00001df9 start + 53
)
terminate called after throwing an instance of 'NSException'

А вот мой код (соответствующие методы)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    //Initiate TabBarController
    self.tabBarController = [[UITabBarController alloc] init];

    NSMutableArray *viewControllersForTabController = [[NSMutableArray alloc] initWithCapacity:2];

    NounViewController *firstViewController = [[NounViewController alloc] initWithNibName:@"NounViewController" bundle:[NSBundle mainBundle]];
    [viewControllersForTabController addObject:firstViewController];
    [firstViewController release];

    PostLoginViewController *secondViewController = [[PostLoginViewController alloc] initWithNibName:@"PostLoginViewController" bundle:[NSBundle mainBundle]];
    [viewControllersForTabController addObject:secondViewController];
    [secondViewController release];

    [tabBarController setViewControllers:viewControllersForTabController];
    [viewControllersForTabController release];

    [window addSubview:tabBarController.view];

    return YES;
}

Я уверен, что это, вероятно, что-то тривиальное, что я забыл сделать, я медленно набираю скорость с разработкой iOS

Ответы [ 2 ]

1 голос
/ 26 апреля 2011

«NSUnknownKeyException» это исключение возникает, когда вы обращаетесь к ключу, которого нет, это не всегда происходит из-за кода, возможно, в Interface Builder возникли некоторые неправильные соединения.Нет проблем с приведенным выше кодом, я попробовал его до конца, он успешно работает.Попробуйте проверить подключение вашего Интерфейсного разработчика, может быть, вам чего-то не хватает там.Скорее всего, сначала вы пытаетесь добавить tabBarController через IB, а затем делаете это с помощью кода.

0 голосов
/ 27 апреля 2011

У меня была такая же проблема ранее. Проблема в том, что в xib-файле есть соединение с создателем интерфейса, для которого в делегате приложения нет соответствующей записи IBOutlet. Вот как я смог это исправить: Найдите тег XML «IBObjectContainer» в файле MainWindow.xib. Скорее всего, вы найдете такую ​​запись:

<object class="IBConnectionRecord">
    <object class="IBCocoaTouchOutletConnection" key="connection">
        <string key="label">viewController</string>
        <reference key="source" ref="664661524"/>
        <reference key="destination" ref="943309135"/>
    </object>
    <int key="connectionID">11</int>
</object>

Вы можете безопасно удалить эту запись, поскольку она, похоже, была введена в файл xib по ошибке. Затем делегат приложения перестает ожидать запись IBOutlet. Кроме того, вы можете добавить запись IBOutlet в делегат приложения с именем "viewController".

Убедитесь, что вы сделали резервную копию файла xib, прежде чем вносить какие-либо изменения.

Вероятно, есть более простой способ избавиться от этого от МБ, но я обычно не пользуюсь МБ, это то, что сработало для меня.

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