В iOS dev, можете ли вы иметь две версии файла .nib и скомпилировать каждую с соответствующей схемой? - PullRequest
0 голосов
/ 21 января 2012

У меня есть файл пера для полной версии приложения. Кнопки в этом представлении связаны с функциями в контроллере представления. У меня есть две схемы (полная версия и облегченная версия). Каждый из них имеет много общих файлов, но имеет свои собственные графические файлы и т. Д. У меня также есть директивы #ifdef для включения кода для облегченной версии приложения.

Я хочу создать другую версию файла пера для облегченной версии, поскольку в представлении будут небольшие различия ... изменения цвета, кнопка добавления информации, дополнительный текст и т. Д. Два файла пера также будут иметь общий доступ. много одинаковых кнопок и т. д., которые должны быть подключены к определенным функциям в контроллере вида.

Могу ли я создать две версии пера и выбрать включение соответствующего пера в соответствующую версию моего приложения? Нотабене Я хочу использовать один проект Xcode с двумя схемами, чтобы справиться с этим. Я не хочу поддерживать два отдельных проекта.

Ответы [ 2 ]

1 голос
/ 21 января 2012

Saurabh верен, но лучше по возможности использовать прекомпилятор. Так что в вашей облегченной версии добавьте -DLITE_VERSION = 1 к параметрам вашего компилятора, затем добавьте:

#ifdef LITE_VERSION
    NSString *DemoViewController_xib = @"DemoViewController_LiteVersion";
#else
    NSString *DemoViewController_xib = @"DemoViewController_FullVersion";
#endif

Преимущество заключается в том, что оператор #ifdef вычисляется во время компиляции, поэтому во время выполнения не требуется никаких дополнительных инструкций.

На самом деле у меня есть 7 разных приложений, которые представляют собой один и тот же проект XCode с разными целями. Таким образом, когда я улучшаю код для одного приложения, автоматически улучшаются и все остальные приложения.

1 голос
/ 21 января 2012

Да, вы определенно можете это сделать, просто создайте два файла xib и укажите владельца файла xib для вашего контроллера представления, и теперь вы можете использовать initWithNibName: для инициализации вашего конкретного xib.

NSString *DemoViewController_xib = @"DemoViewController_FullVersion";
if (IS_Lite_Version)
    DemoViewController_xib = @"DemoViewController_LiteVersion";

DemoViewController *dvc = [[DemoViewController alloc] initWithNibName:DemoViewController_xib bundle:nil];

[self.navigationController pushViewController:dvc animated:YES];
...