Как я запускаю универсальное приложение на средстве моделирования iPhone 3.1.3?

Я работаю над новым приложением, что я хочу быть универсальным для iPhone и iPad. Я начал с, "Создают приложение Оконное" мастер, и он создал делегатов отдельного приложения в группах "iPhone" и "iPad". Так как я уже был довольно знаком с iPhone dev, я внес свой вклад своего проекта, и теперь я готов сделать некоторый материал iPad.

Так... Я начал путем добавления UISplitViewController к моему делегату iPad, переключите Активный SDK на 3,2, и он работает! Но когда я переключаюсь назад на 3.1.3 и пытаюсь выполнить его в средстве моделирования, Сборке и Пойти сбои. Для начала, я вижу:

... путь.../iPad/AppDelegate_Pad.h:13: ошибка: ожидаемый список спецификатора спецификатора перед 'UISplitViewController'

Мне установили мою Базу SDK к 3,2 и мой Целевой набор Развертывания к 3.1.3. Я думал, что это было достаточно. Но я также нашел в документации, что этот метод условно компилирует:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
   MyIPadViewController* vc;
// Create the iPad view controller
#else
   MyIPhoneViewController* vc;
// Create the iPhone view controller
#endif

Я должен сделать это везде? На очень большое количество кода походит добавлять (что я буду избавляться от в скором времени для 4,0 так или иначе), таким образом, я буду чувствовать, что должен делать что-то не так. И, у меня даже нет идеи, как это работает на вещи как @property или @synthesize объявления.

tl; версия доктора вопроса - я пропускал установку где-нибудь?

10
задан bpapa 3 May 2010 в 16:06
поделиться

3 ответа

Как раз наоборот. Универсальное приложение запускает один и тот же двоичный файл на iPhone и iPad, поэтому вы не можете использовать условную компиляцию, чтобы различать две версии. Но вам нужно использовать макрос, который Apple цитирует в документации:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    // iPad-specific code
} else {
    // iPhone-specific code
}
23
ответ дан 3 December 2019 в 13:15
поделиться

Я использую эту функцию C, чтобы код оставался кратким:

BOOL isPad() {
    return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad);
}

Еще я делаю, когда у меня разные файлы xib для iPhone и iPad. У меня есть функция stripPadSuffixOnPhone (), которая помогает упростить код:

// Load/create the Delete table cell with delete button
self.deleteCell = [Utilities loadNib:stripPadSuffixOnPhone(@"DeleteCell~ipad") 
                           ClassName:@"DeleteCell" 
                   Owner:self];

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

39
ответ дан 3 December 2019 в 13:15
поделиться

Вот что у меня работает:

  1. Создайте приложение с помощью SDK 3.2.
  2. Переключите активный SDK на iPhone Simulator 3.1.3 (или что-то еще).
  3. В меню «Выполнить» выберите «Отладка» (но не «Сборка и отладка»).

Бинарный файл, собранный под 3.2, будет установлен в симуляторе 3.x без перекомпоновки. Когда вы закончите, не забудьте вернуть активный SDK к 3.2.

0
ответ дан 3 December 2019 в 13:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: