initForReadingWithData устарела - initForReadingFromData возвращает ноль - PullRequest
0 голосов
/ 12 января 2019

У меня следующее предупреждение (Xcode 10.1 - iOS 12.1)

'initForReadingWithData:' устарел: первый устарел в iOS 12.0 - используйте -initForReadingFromData: ошибка: вместо *

Когда я меняю метод на initForReadingFromData, NSKeyedUnarchiver возвращает nil.

// Current code which produces the warning (but works fine) : 

NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];

NSMutableArray *loadedCredentialIdentities = (NSMutableArray *)[unarchiver decodeObjectForKey:kStoredCredentialIdentities];

[unarchiver finishDecoding];

...

// using initForReadingFromData produces no warning (but doesn't work - loadedCredentialIdentities is nil) : 


NSError *error = nil;
NSKeyedUnarchiver *unarchiver = unarchiver = [[NSKeyedUnarchiver    alloc] initForReadingFromData:data error:&error];

NSMutableArray *loadedCredentialIdentities = (NSMutableArray *)[unarchiver decodeObjectForKey:kStoredCredentialIdentities];

[unarchiver finishDecoding];

Ответы [ 3 ]

0 голосов
/ 11 июня 2019

Это потому что вы используете decodeObjectForKey. Если вы не установите requiresSecureCoding на NO, вы должны использовать вместо decodeObjectOfClass: forKey: .

0 голосов
/ 04 июля 2019

Посмотрите это видео с WWDC 2018, а затем исправьте ваши unarchivers для использования безопасного кодирования: https://developer.apple.com/videos/play/wwdc2018/222/

0 голосов
/ 21 января 2019

Отключение secureCoding решило проблему.

[[NSKeyedUnarchiver alloc] initForReadingFromData: ошибка данных: & ошибка]; unarchiver.requiresSecureCoding = NO; [unarchiver decodeObjectForKey: ...]

В случаях, когда вам не требуется обратная совместимость, лучше не отключать secureCoding

...