#xcode #interface-builder #ios5 #xib
#xcode #конструктор интерфейса #ios5 #xib
Вопрос:
Перед выполнением любого типа разработки iOS 5.0 с использованием Xcode 4.2, Xcode предоставил «MainWindow.xib» в шаблонах. После загрузки и воспроизведения с Xcode 4.2 с iOS 5.0 я заметил, что ни один из предоставленных шаблонов не содержит файлов «MainWindow.xib». Нужно ли нам это еще? Я заметил, что в методе «application didFinishLaunchingWithOptions» в App_Delegate шаблоны теперь включают код, который создает некоторый «UIWindow», и если у вас есть какие-либо навигационные контроллеры, он соответствующим образом обновляет окно.
// code that was pulled from a Master Detail application template
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil];
self.navigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
return YES;
}
Я думаю, мой вопрос в том, нужен ли мне «MainWindow.xib» больше, и если да, то почему шаблоны Apple исключают их?
Ответ №1:
Всегда была возможность не использовать MainWindow.xib. UIWindow можно загрузить программно, выполнив следующее:
1) Убедитесь, что вызов UIApplicationMain в main.m выглядит так:
UIApplicationMain(argc, argv, nil, @"MyAppDelegateClassName");
вместо этого:
UIApplicationMain(argc, argv, nil, nil);
2) Убедитесь, что Info.plist не имеет значения «MainWindow.xib» в качестве основного файла nib.
3) Программная загрузка UIWindow в делегате приложения.
Итак, нет, вам не нужно использовать MainWindow.xib и, на самом деле, вы никогда этого не делали. Вы всегда можете делать что-то программно.
Это хороший вопрос, почему Apple внесла это изменение в настройки Xcode по умолчанию, и я не знаю ответа. Но это может быть связано с производительностью или переходом на ARC или небольшие размеры файлов приложений или что-то еще в целом.
Комментарии:
1. Можно ли указать пару плюсов и минусов? Я думаю, я пытаюсь выяснить, что было бы лучшим решением в отношении использования или неиспользования «MainWindow.xib».
2. Я думал об этом, и у меня на самом деле возникла проблема со слишком большим количеством плюсов. Я полагаю, это позволило вам настроить приложение на основе панели вкладок (или, возможно, навигационный контроллер) немного более визуально, поскольку вы могли управлять представлением контейнера в Interface Builder. Теперь, когда я создаю новое приложение панели вкладок с шаблоном, панель вкладок существует только в коде. Но поскольку по-прежнему легко создавать и использовать контроллеры просмотра с помощью Interface Builder, мне трудно думать, что многое было потеряно. Я бы, вероятно, продвигался вперед, не используя MainWindow.xib.
Ответ №2:
Я думаю, причина, по которой он сейчас отсутствует, заключается в том, что создание окна программно намного эффективнее, чем открытие файла xib и разархивирование объектов. Как правило, если вы можете сделать это в одной строке кода, вы должны сделать это в коде.
Прочитайте ответ Мэтью Гиллингема для получения инструкций о том, как вручную изменить старый проект, чтобы он работал без MainWindow.xib.
Комментарии:
1. Итак, вы думаете, что просто обойти «MainWindow.xib» — это путь для всех будущих проектов?
2. Да, я всегда создаю окно программно для всех своих проектов, потому что, как вы знаете, первое, что появляется в окне, в любом случае управляется контроллером представления. Наличие xib только с окном и ничем другим не дает вам никаких преимуществ.
Ответ №3:
Я всегда чувствую смущение по поводу использования MainWindow.xib: даже с ним мне все равно нужно установить RootViewController window или addSubview к нему. Разве эта информация не содержится в MainWindow.xib? Почему мне все еще нужно сообщать window об этом?
Поэтому удаление MainWindow.xib, похоже, имеет смысл.