2010-07-10 4 views
3

Я нашел это в StackOverflow относительно проблемы, но не смог решить мою проблему.Предупреждение XCode при использовании устаревшего метода setStatusBarHidden

Calling the appropriate setStatusBarHidden per iOS version

if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)]) 
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO]; 
else 
    [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO]; 

Я поставил свою цель развертывания ОС до 3.0, но я до сих пор Получать предупреждение «setStatusBarHidden: анимированный: осуждаются»

Я хотел бы не иметь никаких предупреждений, если это возможно в проект, а не взломать его. Есть ли способ, которым я должен создать проект, чтобы удалить это предупреждение?

Я установил SDK проекта в 4.0. И целевой базовый SDK до 4.0, целевой SDK для развертывания до 3.0.

Я сделал эти настройки для «всех конфигураций»

Заранее спасибо

Обновление: Видимо, предупреждение появляется только в симуляторе, а не при установке на устройство.

+1

В 'setStatusBarHidden: withAnimation:' 'часть' withAnimation: 'не принимает' BOOL', она принимает константу 'UIStatusBarAnimation'. [См. Здесь] (http://developer.apple.com/iphone/library/documentation/uikit/reference/UIApplication_Class/Reference/Reference.html#//apple_ref/occ/instm/UIApplication/setStatusBarHidden%3awithAnimation%3a) –

+0

Благодаря! Пропустил это! –

ответ

4

Предупреждение об устаревании означает, что вы используете то, что не будет поддерживаться в будущем. Этот конкретный синтаксис указан как устаревший here. Вы избавляетесь от предупреждения, не используя устаревший метод. Вы должны использовать setStatusBarHidden:withAnimation: вместо этого

Если вы хотите поддерживать эту функциональность как на 3,0, так и на 3.2+, вам придется писать условный код на основе целевой версии. Существует некоторая полезная информация о макросах и функциях препроцессора, которые помогут вам here.

+0

Но это не работает с устройствами OS 3.0. Он отключает мой iPod touch с ОС 3.1.3 для непризнанного селектора. –

+1

Я не разработчик Iphone, но думаю, вам нужно проверить, существует ли какая-либо особенность более поздней версии, прежде чем использовать его, вызвав responsesToSelector (Из вашей ссылки выше) –

+0

Резкий проголосовать BTW. Ответ был верным, поскольку он стоял. В любом случае отредактировано с дополнительной информацией. –

3

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

if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)]) 
{ 
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; 
} 
else if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: animated:)]) 
{ 
    [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO]; 
} 
else if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden:)]) 
{ 
    [[UIApplication sharedApplication] setStatusBarHidden:NO]; 
} 

Однако, проблема возникла после того как я переключился устройства от iPhone до Юниверсала и обратно iPhone , Потребовалось некоторое время, чтобы понять, что для цели развертывания было изменено значение 4.3, поэтому изменение его на 3.0 привело к исчезновению предупреждения.

1

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

#pragma GCC diagnostic ignored "-Wdeprecated-declarations" 
(void) methodUsingDeprecatedStuff { //use deprecated stuff } 

или

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

#pragma НКИ диагностики предупреждение "-Независимые-декларации"

это приведет к удалению предупреждений.

Надеюсь, это поможет вам.

+0

Не забудьте поставить '#pragma clang diagnostic pop' после устаревшего кода, чтобы снова включить предупреждения – Ander

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