2014-01-29 4 views
0

Мое приложение поддерживает как iOS 6, так и iOS 7. Я использую некоторые методы, которые доступны только с iOS7 (например, suspend), но недоступны в iOS6. Тем не менее, я использую правильное разветвление для iOS6 и iOS7 (условия размещения соответственно). Тем не менее, я получаю предупреждение, когда я использую метод suspend.Предупреждение бросается, когда используется метод, доступный только для iOS 7

Это мой метод:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
     UIApplication *app = [UIApplication sharedApplication]; 

    if([app respondsToSelector:@selector(suspend)]) 
    { 
     [app performSelector:@selector(suspend)]; 

     [NSThread sleepForTimeInterval:1.0]; 
    } 
     exit(0); 
} 

Это предупреждение

"Undeclared Selector 'suspend'" 
+0

Показать соответствующий код. – rmaddy

+1

Проверьте это ** http: //stackoverflow.com/questions/18404746/condition-hide-code-from-the-compiler? Lq = 1 ** –

+0

@rmaddy: см. Обновленный вопрос – Shradha

ответ

3

Есть несколько вещей неправильно с кодом вас в курсе.

  1. Там нет общественного метод под названием suspend для UIApplication. Кажется, вы пытаетесь вызвать частный API. Компилятор жалуется, потому что не может найти метод с именем suspend (потому что нет общедоступного, который можно найти). И в качестве примечания, это, скорее всего, приведет к тому, что ваше приложение будет отклонено Apple.

  2. НИКОГДА не спите по основной теме. Очень плохо.

  3. Никогда не звоните exit. Это не разрешено.

+0

Итак, каков альтернативный способ добиться того, что я делаю в этой части кода? На самом деле, я не хочу, чтобы пользователь запускал приложение на iPodTouch. Поэтому мне нужно проверить, пытается ли он запустить приложение на нем, и если да, мне нужно немедленно выйти из приложения. – Shradha

+0

Приложение Apple будет отклонено Apple, если вы попытаетесь предотвратить запуск приложения на iPod touch. Почему вы делаете какой-либо из этого кода? – rmaddy

+0

, потому что это требование клиентов .. ему нужно приложение для работы только на iphone и iPad .. и «suspend» присутствует в классе NSURLSession – Shradha

0

Предупреждение выдается, поскольку ни один импортированный файл заголовка не объявляет метод, соответствующий селектору «suspend».

suspend - частный API.

2

Как показала дискуссия, что вы действительно хотите сделать это, чтобы запретить пользователю устанавливать приложение на IPod Touch, я добавлю ответ на этот вопрос:

способ остановить приложение от того, установленный на определенных устройствах, должен использовать UIRequiredDeviceCapabilities в вашем plist приложения.

В соответствии с this list кажется, что magnetometer находится как можно ближе к идеальному решению. Он поддерживается во всех iPhones и iPad, кроме iPad1, и он не поддерживается ни одной из итераций iPod touch ...

+0

ok .. спасибо .. но мне нужно поддерживать iPad 1 до .. поэтому я думаю, что не смогу использовать этот ключ. – Shradha

+0

Well то у вас будет неприятная работа по информированию вашего клиента о том, что его требования не являются технически возможными. У вас есть мое сочувствие ... ;-) –

0

Возможно, вы сможете подавить предупреждение, создав определение категории UIApplication и объявите функцию приостановки, иначе вы можете подавить его с помощью флага -warc, но вам нужно будет найти правильное имя предупреждения.

может быть, как это:

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wundefined-selector" 
//your warning causing code here 
#pragma diagnostic pop 

-OOOOR-

Попробуйте это решение: How to get rid of the 'undeclared selector' warning

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