Устаревшая константа в iOS - PullRequest
4 голосов
/ 02 июля 2010

Я создаю приложение для iOS 3.1.3 и более поздних версий, и у меня возникла проблема с UIKeyboardBoundsUserInfoKey. Оказывается, это устарело в iOS 3.2 и позже. Я использовал следующий код, чтобы использовать правильную клавишу в зависимости от версии iOS:

if ([[[UIDevice currentDevice] systemVersion] compare:@"3.2" options:NSNumericSearch] != NSOrderedAscending)
    [[aNotification.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue: &keyboardBounds];
else [[aNotification.userInfo valueForKey:UIKeyboardBoundsUserInfoKey] getValue: &keyboardBounds];

И это на самом деле работает нормально, но Xcode предупреждает меня, что UIKeyboardBoundsUserInfoKey устарела. Как я могу избавиться от этого предупреждения, не подавляя другие предупреждения?

Кроме того, есть ли способ просто проверить, определено ли UIKeyboardBoundsUserInfoKey, чтобы не проверять версию iOS? Я попытался проверить, был ли это NULL или nil и даже UIKit слабой ссылки, но ничего, казалось, не работало.

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

Ответы [ 2 ]

4 голосов
/ 02 июля 2010

Поскольку присутствие устаревшей константы в любом месте вашего кода вызовет предупреждение (и нарушит сборку для нас, пользователей-ошибок), вы можете использовать фактическое значение константы для поиска в словаре. Спасибо Apple за то, что обычно (всегда?) Используете имя константы в качестве значения.

Что касается проверки во время выполнения, я думаю, что вы лучше тестируете новую константу :

&UIKeyboardFrameEndUserInfoKey!=nil

Итак, вот что я на самом деле делаю, чтобы получить кадр клавиатуры (на основе этого другого ответа ):

-(void)didShowKeyboard:(NSNotification *)notification {
    CGRect keyboardFrame = CGRectZero;

    if (&UIKeyboardFrameEndUserInfoKey!=nil) {
        // Constant exists, we're >=3.2
        [[notification.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardFrame];
        if (UIInterfaceOrientationIsPortrait([[UIDevice currentDevice] orientation])) {
            _keyboardHeight = keyboardFrame.size.height;
        }
        else {
            _keyboardHeight = keyboardFrame.size.width;
        }   
    } else {
        // Constant has no value. We're <3.2
        [[notification.userInfo valueForKey:@"UIKeyboardBoundsUserInfoKey"] getValue: &keyboardFrame];
        _keyboardHeight = keyboardFrame.size.height;
    }
}

Я проверял это на устройстве 3.0 и симуляторе 4.0.

0 голосов
/ 02 июля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...