Как быть нацеленным на определенную версию iPhone?

Если мне позволят рассуждать в Smalltalk, где блоки являются объектами класса BlockClosure, я бы предположил, что вы представляете свойство , которое вы хотите количественно определить как блок p. [ 1121]

Для простоты предположим, что свойство зависит от одного параметра x. Тогда p(x) будет соответствовать выражению Smalltalk

p value: x

, которое оценивает блок p, используя аргумент x.

Таким образом, вы можете реализовать метод Smalltalk forAll: в классе BlockClosure как:

forAll: aCollection
  aCollection do: [:x | (self value: x) ifFalse: [^false]].
  ^true

, который проверяет, что свойство p, представленное блоком получателя, оценивается как true ] для всех элементов в aCollection (вашей вселенной).

Если ваша вселенная не меняется (обычный случай в контексте проблемы), и какие изменения это свойство, вы можете определить класс Universe, который будет содержать коллекцию элементов в своей переменной экземпляра [ 1115]. Затем вы можете реализовать в Universe

forAll: aProperty
  ^aProperty forAll: contents

, где внутреннее сообщение forAll: - это сообщение, реализованное в BlockClosure.

36
задан Oliver 4 May 2009 в 13:38
поделиться

5 ответов

Вы можете использовать этот #define, чтобы изменить то, что вы строите для каждого SDK ...

#if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_2_2
// iPhone 3.0 code here
#endif

И сделать это во время выполнения, чтобы запустить код для 3.0 и выше:

float version = [[[UIDevice currentDevice] systemVersion] floatValue];
if (version >= 3.0)
    {
    // iPhone 3.0 code here
    }
89
ответ дан 27 November 2019 в 05:15
поделиться

Это в опциях сборки Xcode. Раскрывающийся список в верхнем левом углу, который говорит что-то вроде «myapp - 3.0 | Debug» Выберите сборку, которую хотите, и нажмите «Готово».

0
ответ дан 27 November 2019 в 05:15
поделиться

Использование хитрости добавления OTHER_CFLAGS = «-g3 -save-temps -dD» из этого ответа я обнаружил, что определение __IPHONE_OS_VERSION_MIN_REQUIRED 20000 с проектом, нацеленным на 2.2.1. Возможно, это сработает?

0
ответ дан 27 November 2019 в 05:15
поделиться

Я вполне уверен, что комментарий к ОП подводит итог. Ты не можешь Потому что директива времени компиляции не может принимать решение во время выполнения. В Xcode, если вы нацелены на 3.0, он не будет работать на телефоне 2.2.1. Если вы нацелились на 2.2.1, он не скомпилируется, потому что у вас есть специальный код 3.0.

Единственное верное решение - две версии вашего приложения, одна из которых скомпилирована для 3.0, а другая для 2.2. 1.

0
ответ дан 27 November 2019 в 05:15
поделиться

Ну, мои два цента:

Как насчет создания вашего приложения с последней версией, скажем 3.0, чтобы вы могли использовать все новые и крутые API-интерфейсы, и указав цель развертывания как самую последнюю версию вы хотите поддержать, чтобы ребята, которые не потратили время на обновление своих устройств, все равно запустили ваше приложение. В этом случае, как показано выше, вам необходимо проверить наличие самой последней версии SDK и предоставить альтернативные функции для обеспечения обратной совместимости вашего приложения.

С уважением, Хардик

-2
ответ дан 27 November 2019 в 05:15
поделиться
Другие вопросы по тегам:

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