Преобразование панели навигации в приложение с вкладками - PullRequest
2 голосов
/ 10 мая 2010

Мне было интересно, как преобразовать приложение в стиле NavigationController в приложение в стиле TabBarcontroller. Я изменил свое главное окно, чтобы оно больше не содержало навигационный контроллер (а вместо него - tabbarcontroller) и мой делегат также соответствующим образом, но когда я запускаю приложение, что-то все еще думает, что я хочу навигационный контроллер:

Завершение работы приложения из-за необработанного исключения «NSUnknownKeyException», причина: «[setValue: forUndefinedKey:]: этот класс не совместим с кодированием значения ключа для ключа navigationController. '

Трассировка стека:

#0 0x020fa004 in ___TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION___
#1 0x96fc0509 in objc_exception_throw
#2 0x020ee1c1 in -[NSException raise]
#3 0x000d8a78 in _NSSetUsingKeyValueSetter
#4 0x000d84c5 in -[NSObject(NSKeyValueCoding) setValue:forKey:]
#5 0x004fb4c8 in -[UIRuntimeOutletConnection connect]
#6 0x020af92f in -[NSArray makeObjectsPerformSelector:]
#7 0x004f9f7f in -[UINib instantiateWithOptions:owner:loadingResourcesFromBundle:]
#8 0x004fbfcb in -[NSBundle(NSBundleAdditions) loadNibNamed:owner:options:]
#9 0x0033b0a6 in -[UIApplication _loadMainNibFile]
#10 0x0034482a in -[UIApplication _runWithURL:sourceBundleID:]
#11 0x00341b88 in -[UIApplication handleEvent:withNewEvent:]
#12 0x0033d6d3 in -[UIApplication sendEvent:]
#13 0x003440b5 in _UIApplicationHandleEvent
#14 0x0265aed1 in PurpleEventCallback
#15 0x02092b80 in CFRunLoopRunSpecific
#16 0x02091c48 in CFRunLoopRunInMode
#17 0x0033be69 in -[UIApplication _run]
#18 0x00345003 in UIApplicationMain
#19 0x00002ec8 in main at main.m:14

Интерфейс для моего делегата выглядит следующим образом:

@interface CPPlayerAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
    UIWindow *window;
 UITabBarController *tabBarController;
}

#pragma mark -
#pragma mark Window/view
@property (retain) IBOutlet UIWindow *window;
@property (retain) IBOutlet UITabBarController *tabBarController;

Реализация моего делегата:

@implementation CPPlayerAppDelegate

@synthesize window;
@synthesize tabBarController;

@synthesize stateController, distribution, languageManager, updateParser, soundPlayer, ticketProcessor;

#pragma mark -
#pragma mark Application lifecycle

- (void)applicationDidFinishLaunching:(UIApplication *)application { 
 [window addSubview: tabBarController.view];
    [window makeKeyAndVisible];
}

Где я могу указать, что приложение является приложением, управляемым вкладкой, а не приложением, управляемым навигационной панелью?

Заранее спасибо,

Ответы [ 2 ]

3 голосов
/ 10 мая 2010

Вам нужно изменить свой основной XIB. Откройте его в Интерфейсном Разработчике, удалите имеющийся у вас контроллер навигации и замените его контроллером панели вкладок. Затем подключите выход tabBarController участника вашего приложения к контроллеру панели вкладок в XIB. Для получения дополнительной информации о том, как это сделать, см. Руководство пользователя Interface Builder и, более конкретно, раздел Соединения и привязки .

0 голосов
/ 05 января 2011

Я обнаружил, что файл -Info.plist содержал ссылку на неправильный файл xib после того, как я преобразовал свой проект в приложение для iPad, а затем удалил контроллер навигации и заменил новую структуру представления верхнего уровня без него. Я загрузил и отредактировал xib не-iPad, но пропустил папку Resources-iPad, созданную с другой xib.

Когда-то позаботился о том сибе, все было хорошо.

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