Xcode - директива препроцессора проверяет, какой SDK используется - PullRequest
2 голосов
/ 20 мая 2011

Я делаю некоторые изменения в существующей библиотеке, которая использует функцию " addTimeInterval: ", которая устарела в OS X v10.6. Я хотел бы подавить предупреждение с помощью директивы препроцессора, чтобы проверить, какую версию SDK использует текущая сборка. Примерно так:

NSDate *newDate= nil;

#if OS X v10.6 (or newer)
newDate= [someOtherDate dateByAddingTimeInterval:60];
#else
newDate= [someOtherDate addTimeInterval:60];
#endif

Это вообще возможно с помощью Xcode 4?

Ответы [ 3 ]

4 голосов
/ 20 мая 2011

Как насчет +[NSDate dateWithTimeIntervalSinceNow:], который существует с 10.0?


Может быть, вместо проверки во время компиляции, вы можете выполнить проверку во время выполнения:

if ([[NSDate class] instancesRespondToSelector:@selector(dateByAddingTimeInterval:)]) {
  newDate = [someOtherDate dateByAddingTimeInterval:60];
} else {
  newDate = [someOtherDate addTimeInterval:60];
}
1 голос
/ 20 мая 2011
#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6)
    newDate = [someOtherDate dateByAddingTimeInterval:60];
#else
    newDate = [someOtherDate addTimeInterval:60];
#endif

Но он не будет работать с 10.5, если вы соберете его с 10.6 SDK. нужна проверка во время выполнения, как сказал @Dave.

0 голосов
/ 20 мая 2011

Вы можете использовать точно такой же метод, который я описал в CLLocation getDistanceFrom: vs distanceFromLocation:

Juste заменяет CLLocation на NSDate, getDistanceFrom: на addTimeInterval: и distanceFromLocation: с dateByAddingTimeInterval: в инструкции, и вы всегда сможете использовать dateByAddingTimeInterval: независимо от того, какой SDK вы используете и какую версию ОС вы используете.

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