__IPHONE_OS_VERSION_MIN_REQUIRED пожалуйста, объясните - PullRequest
3 голосов
/ 27 июля 2010

Я занимаюсь разработкой приложения, которое я хотел бы развернуть для iPhone 3.0, iPhone 4.0 и которое может работать на iPad в режиме эмуляции.

Я занимаюсь разработкой с использованием XCode 3.2.3видео для воспроизведения.Я хотел бы использовать MPMoviePlayerViewController для> = 3.2 и MPMoviePlayerController для <3.2. </p>

Если я использую

Class mplayerControllerClass = NSClassFromString(@"MPMoviePlayerViewController");
if(mplayerControllerClass != nil) 
{
    MPMoviePlayerViewController* moviePlayerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:movieUrl];

   ...
}

, сможет ли iPhone с ОС 3.0 обрабатывать классон не знает?

Хорошо ли помещать код в __IPHONE_OS_VERSION_MIN_REQUIRED > 30200 блок ifelse?вот так:

Class mplayerControllerClass = NSClassFromString(@"MPMoviePlayerViewController");
if(mplayerControllerClass != nil) {
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 30200
   MPMoviePlayerViewController* moviePlayerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:movieUrl];
    ...
}

но что на самом деле делает __IPHONE_OS_VERSION_MIN_REQUIRED?Мне кажется, что он просто повторяет настройки, которые я настроил для своего проекта: min = 3.0

Ответы [ 2 ]

2 голосов
/ 27 июля 2010

В вашем первом фрагменте вы создаете класс на основе NSString. Это возможно, так как вы слабо связываете свой фреймворк, так что старые версии ОС не терпят крах в этой ситуации. Это делается во время выполнения и будет работать так, как вы ожидаете.

Второй фрагмент, с другой стороны, использует условный прекомпилятор. Это не будет иметь никакого эффекта, поскольку для использования MPMoviePlayerViewController вы будете использовать базовый SDK 4.0, поэтому #if всегда будет истинным.

Итог: слабое связывание - это то, что вам нужно, продолжайте с первым фрагментом и убедитесь, что рамки слабо связаны .

2 голосов
/ 27 июля 2010

Ты прав насчет __IPHONE_OS_VERSION_MIN_REQUIRED: это все, что ты вкладываешь в свой проект.Поэтому любой оператор #if, который вы используете, будет оцениваться во время компиляции, а это не то, что вам нужно.

Вместо этого делайте то, что вы делали изначально, но с некоторыми незначительными изменениями, например:

Class mplayerControllerClass = NSClassFromString(@"MPMoviePlayerViewController");
if(mplayerControllerClass != nil) {
    id moviePlayerViewController = [[mplayerControllerClass alloc] initWithContentURL:movieUrl];
    ...
}

Дело в том, что вы не должны использовать MPMoviePlayerViewController сам по себе, даже если вы убедились, что он должен существовать (в любом случае, я не думаю, что он скомпилирует / скомпонует правильно).Но да, это будет нормально работать на устройстве с ОС 3.0.(См., Например, пример Apple OpenGL ES для того же самого с CADisplayLink.)

...