2013-12-03 2 views
1

Iso 7 введен новый API для пирогIOS 7 API не работает с прошивкой 6 с прошивкой 7 SDK

setPopoverContentSize: анимированный:

вместо

contentSizeForViewInPopover

, который использовался в iOS6 и предыдущих нас. Поскольку я использую iOS7 SDK, не следует, чтобы первый API перенаправлял себя на использование более старой версии на iOS 6. Почему мне нужно позаботиться о замене одного вызова с if, иначе обнаружение iOS в коде.

Есть ли способ использовать один API для версии iOS?

+0

Нет необходимости обертывать его в 'if statement', который проверяет, может ли он запускать метод с помощью' responsesToSelector: ', а затем вам нужно будет использовать правильный метод для правильной iOS. – Popeye

+0

Что такое «Цель развертывания» вашего приложения? Если это 6.x, вы можете продолжать использовать старый API.Если ваше приложение будет поддерживать только iOS 7, то обновите его до нового API. – rmaddy

+0

@rmaddy моя цель развертывания - iOS 6. –

ответ

3

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

iOS6 не знает, что означает новый вызов, поэтому он не может перенаправляться.

+0

За исключением того, что в этом случае новый вызов был доступен с iOS 3.2. – Caleb

+1

Отличная точка, просто подтвердил свой ответ. Я не проверял документы. –

5

Есть ли способ использовать один API для версии iOS?

Да. Единственное очевидное изменение в iOS 7 заключается в том, что contentSizeForViewInPopover теперь устарел. Другой звонок, -setPopoverContentSize:animated:, и соответствующий popoverContentSize объект have been available since iOS 3.2.

Учитывая, что правильный подход заключается в изменении кода для использования popoverContentSize и -setPopoverContentSize:animated:. Ваш код будет отлично работать в iOS 6, и вам не придется беспокоиться о том, чтобы через какой-то момент в будущем удалить код iOS 6-only.

-1

Это может помочь:

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) { 
    //code for iOS 6 
} else { 
    //code for iOS 7 
} 

Может быть боль, но это лучшее, что мы можем сделать сейчас.

+0

Правильная вещь - использовать 'responsesToSelector', а не проверять версию iOS. Но, несмотря на это, в любом случае это не нужно. – rmaddy

+0

@rmaddy, ладно, я видел это в обоих направлениях. Позаботьтесь о том, почему мое предложение не подходит? Просто любопытно, спасибо. – JustAnotherCoder

+0

Всегда лучше проверить конкретный API. Apple четко заявляет об этом в своих документах. И это намного проще в коде. Вы точно знаете, что вы проверяете. И он избегает возможных проблем, ища неправильную версию ОС. – rmaddy

0

Лучший способ справиться с этой ситуацией - использовать более старый вызов API, как и все здесь. Если ваша цель развертывания - 6.x, ваше приложение будет компилироваться и создаваться против этого, и вам будет хорошо идти.

Вам не нужно беспокоиться о поддержке IOS 6/7, если ваша цель не IOS 7.

Это, как говорится, если в будущем вы двигаться к цели прошивкой 7, разработчик должен отвечать за обратную совместимость, а не за SDK. SDK не может делать предположения о вашем коде и перенаправлять устаревшие вызовы на более новую версию ... Это просто не работает, и такая система будет задавать проблемы.

Кроме того, в этом случае setPopoverContentSize: анимированный: не является исключением для iOS7 и поддерживается еще в iOS3.2, поэтому вам хорошо идти.

+1

Хорошо до последнего предложения. Более старый вызов фактически устарел. Его можно все же использовать, конечно, в этом случае, но он устарел в iOS 7. – rmaddy

+0

Он не устарел в UIPopoverController.h и в документах. – Sid

+0

Это метод 'UIViewController', а не' UIPopoverController'. – rmaddy

Смежные вопросы