Как я могу загрузить зависимую от прошивки NIBS? - PullRequest
0 голосов
/ 24 октября 2010

Вот мой вопрос:

У меня приложение работает нормально на iOS 3.0 Я долго работал над портированием его на 4.0 и включением новых функций.

Я добавил iAds с помощью Interface Builder.

Я знаю, что должен определить это программно, чтобы поддерживать устройства 3.0. Я слабо связал рамки. Но приложение вылетает при загрузке NIB.

Есть ли способ загрузить NIB в зависимости от версии прошивки? Допустим, у меня есть FirstView.xib и FirstView3X.xib

Как выбрать, какой будет загружаться в зависимости от прошивки?

Спасибо

PS: Это мой первый вопрос по StackOverflow!

Ответы [ 2 ]

1 голос
/ 24 октября 2010

Вы можете получить текущую версию из объекта UIDevice:

NSString *osVersion = [[UIDevice currentDevice]systemVersion];
NSArray *ver = [osVersion componentsSeparatedByString:@"."];

Если вы довольны сравнением строк для отдельных значений (например, [[ver objectAtIndex:0] isEqualToString:@"3"]).Возможно, вы захотите преобразовать номера версий в целые числа, чтобы вы могли сравнить их по диапазону (например, osMajor >= 4).

Вы также можете проверить наличие определенных классов и загрузить соответствующий NIB на основе этого:

if (NSClassFromString(@"MKMapView") != nil) {
    /* Do map stuff... */
}
1 голос
/ 24 октября 2010

Поздравляю с первым вопросом :-) Как вы загружаете перья? Хорошая идея разбить интерфейс на несколько файлов. Я обычно использую отдельный кончик для каждого контроллера и загружаю их, используя инициализатор initWithNibName:bundle:. Поскольку вы указали здесь имя пера, вы можете легко настроить поведение загрузки.

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

id tab1 = [[UIViewController alloc] initWithNibName:@"Tab1" bundle:nil];
id tab2 = [[UIViewController alloc] initWithNibName:@"Tab2" bundle:nil];
id tab3 = [[UIViewController alloc] initWithNibName:@"Tab3" bundle:nil];
[tabBarController setViewControllers:[NSArray arrayWithObjects:
    tab1, tab2, tab3, nil]];

И так как теперь у вас есть контроль над именами перьев, вы можете легко определить версию прошивки и загрузить правильный перо:

id tab1 = [[UIViewController alloc] initWithNibName:
    [self nibNameForCurrentFirmware] bundle:nil];

Что касается самого определения версии прошивки, думаю, вы могли бы использовать [UIDevice systemVersion] .

...