Я начал свой проект обратно в xcode 3 как «приложение с вкладками», чтобы настроить панель вкладок в Interface Builder.Как изменить проект xcode с панели с вкладками на простой?
Теперь у меня есть веские основания для создания окна панели вкладок программно.
Я прочитал много вещей и сумел создать новый проект с кодированной панелью вкладок, и все это прекрасно работает. Поэтому я считаю, что я понял, как создать проект панели вкладок с нуля на основе нового «Пустого приложения» (я думаю, что это называлось «оконным приложением» в xcode 3).
Однако, когда я пытаюсь принять этот код в свой текущий проект, который был запущен как «приложение с вкладками», я всегда получаю: «Ожидается, что приложения будут иметь корневой контроллер в конце запуска приложения» на отладочном консоль.
Что мне нужно сделать, чтобы изменить тип моего проекта из «приложения с вкладками» в «пустое приложение» ретроспективно? Или это единственный способ начать новый проект с нуля и скопировать все исходные файлы из старого?
КСТАТИ: прибегая к помощи сообщению об ошибке приводит меня к этой превосходной Теме: Applications are expected to have a root view controller at the end of application launch
К сожалению, ни один из предложенных решений не работает для меня. Вот почему я предполагаю, что моя проблема связана с разными типами проектов с самого начала.
Edit: меня попросили предоставить код didFinshWithLaunching:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleBlackTranslucent];
#ifdef FREE
window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
self.tabBarController = [[[FcTabBarController alloc] init] autorelease];
VotingMenuTVC *vc0 =[[[VotingMenuTVC alloc] initWithNibName:@"VotingMenuTVC" bundle:nil] autorelease];
ChannelsTVC *vc1 =[[[ChannelsTVC alloc] initWithNibName:@"ChannelsTVC" bundle:nil] autorelease];
NSArray* controllers = [NSArray arrayWithObjects:vc0, vc1, nil];
tabBarController.viewControllers = controllers;
// Add the tab bar controller's current view as a subview of the window
float ver = [[[UIDevice currentDevice] systemVersion] floatValue];
if (ver >= 4.0) {
self.window.rootViewController = self.tabBarController;
} else {
[window addSubview:[tabBarController view]];
}
[window addSubview:[tabBarController view]];
NSLog(@"RootViewController: %@",self.window.rootViewController);
NSLog(@"TabBarController: %@",self.tabBarController);
#else
float ver = [[[UIDevice currentDevice] systemVersion] floatValue];
if (ver >= 4.0) {
self.window.rootViewController = self.tabBarController;
} else {
[window addSubview:[tabBarController view]];
}
#endif
[self.window makeKeyAndVisible];
return YES;
}
для текущей целевой компилятор макрос "FREE" был установлен. В противном случае он будет скомпилирован для другого таргетинга, для которого MainWindow.xib все еще существует (и работает отлично). В настоящее время MainWindow.xib все еще является частью Boundle, даже той, для которой установлен FREE. Но он не задан как основной интерфейс в файле plist для цели. Основной интерфейс пуст.
В соответствии с инструкциями NSLog (и анализом отладки) свойство toolBarController прекрасно, но rootViewController для окон равен нулю, чего я не понимаю.
Как возник вопрос от Фироза Лаффера, спрашивающего, что MainWindow.xib все еще существует, это то, что я изменил. Я обновлю это сообщение позже, опираясь на результат.
У вас есть наконечник MainWindow? Есть ли контроллер окна и панели вкладок? Что делает ваше приложение: didFinishLaunchingWithOptions: похоже? –