Современный способ борьбы с устареванием на iOS / macOS - PullRequest
0 голосов
/ 03 октября 2018

Как подавить предупреждение об устаревании в макросе доступности?Я знаю, что доступность - отличный способ проверить наличие новых API, но я стараюсь подавить предупреждения об устаревании.Какие у меня есть альтернативы, кроме упомянутых ниже?(1.pragma 2.performSelector)

MyModel *model;
if (@available(macOS 10.13, *)) {
    NSError *error;
    model = [NSKeyedUnarchiver unarchivedObjectOfClass:[MyModel class] fromData:metadata error:&error];
    if (error) {
        [[NSAlert alertWithError:error] runModal];
    }
} else {

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated"

    model = [NSKeyedUnarchiver unarchiveObjectWithData:metadata];

#pragma clang diagnostic pop
}

Альтернативно используйте для подавления предупреждения

if ([NSKeyedUnarchiver respondsToSelector:@selector(unarchiveObjectWithData:)]) {
    model = [NSKeyedUnarchiver performSelector:@selector(unarchiveObjectWithData:) withObject:metadata];
}

1 Ответ

0 голосов
/ 03 октября 2018

Вы получите предупреждение об устаревании только в том случае, если вы используете API, который устарел на уровне цели развертывания или ранее него.

NSKeyedUnarchiver unarchiveObjectWithData устарело с macOS 10.14.Вы получите предупреждение об устаревании только в том случае, если целью развертывания является macOS 10.14 или более поздней версии.Но опубликованный вами код подразумевает, что вы хотите поддерживать macOS 10.12 или более раннюю версию.

NSKeyedUnarchiver unarchivedObjectOfClass:fromData:error: был добавлен в macOS 10.13.

Если вы действительно хотите использовать только цель развертывания macOS 10.13 или более поздней версии,вам не нужны if (@available(macOS 10.13, *)) или else.Просто используйте новый API и готово.

Код в вашем вопросе (без прагм) следует использовать только в том случае, если вы хотите поддерживать macOS 10.12 или более раннюю версию.Затем необходимо установить для цели развертывания MacOS 10.12 или более раннюю версию.И в этом случае вам не нужны прагмы, и вы не получите никаких предупреждений об устаревании.

...