Мое приложение закрывается в ios6 с помощью UIAppearance setTintColor

мое приложение работает без проблем в ios 7, но когда я запускаю его в ios 6, оно падает. Отчет:

2013-10-17 22:58:45.509 Santarem Guide[606:c07] -[_UIAppearance setTintColor:]: unrecognized selector sent to instance 0xa149390
2013-10-17 22:58:45.510 Santarem Guide[606:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_UIAppearance setTintColor:]: unrecognized selector sent to instance 0xa149390'
*** First throw call stack:
(0x29d8012 0x1951e7e 0x2a634bd 0x29c7bbc 0x29c794e 0x7ade 0x8967b7 0x896da7 0x897fab 0x8a9315 0x8aa24b 0x89bcf8 0x2e69df9 0x2e69ad0 0x294dbf5 0x294d962 0x297ebb6 0x297df44 0x297de1b 0x8977da 0x89965c 0x2dfd 0x20fa725)
libc++abi.dylib: terminate called throwing an exception
(lldb) 

У кого-нибудь была эта проблема?

В моем делегате приложения у меня есть [[Внешний вид UIView] setTintColor:[UIColor whiteColor]]; и если я переверну это на [[Внешний вид UIView] setBackgroundColor:[UIColor whiteColor]]; я получаю новую ошибку, которая

17.10.2013 23:08:58.310 Руководство по Santarem [659:c07] -[UITableView setTintColor:]: нераспознанный селектор отправлен экземпляру 0x1138aa00

и все становится белым.


person Osvaldo Cipriano    schedule 17.10.2013    source источник
comment
Некоторые методы устаревают между версиями SDK, проверьте, доступен ли метод перед использованием.   -  person Nekak Kinich    schedule 18.10.2013
comment
Как я могу увидеть, какой из них устарел?   -  person Osvaldo Cipriano    schedule 18.10.2013
comment
if([[UIView appearance] respondsToSelector:@selector(setTintColor:)]){ [[UIView appearance] setTintColor:[UIColor whiteColor]]; } с этим.   -  person Nekak Kinich    schedule 18.10.2013
comment
Пожалуйста, не забудьте отметить правильный ответ!   -  person Alex Cio    schedule 30.10.2014


Ответы (3)


Вы должны проверить, доступен ли метод, прежде чем использовать его.

if ([[UIView appearance] respondsToSelector:@selector(setTintColor:)]) {
    [[UIView appearance] setTintColor:[UIColor whiteColor]];
}
person JeroValli    schedule 17.10.2013

Проверьте, совместимо ли целевое устройство с iOS7:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
    [[UIView appearance] setTintColor:[UIColor whiteColor]];
}
person Keith OYS    schedule 09.05.2014

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

if (SYSTEM_VERSION_LESS_THAN(@"7.0")) {
        // code here 
} else { 
   code here
}

Во многих частях проекта он так и мог работать в ios6. Еще одна проблема заключалась в том, что я также использовал свою карту с 3D.

Спасибо за ответы

В этом случае вы должны включить следующий макрос в класс или глобальный в .pch файле

#define SYSTEM_VERSION_LESS_THAN(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
person Osvaldo Cipriano    schedule 17.10.2013