initForReadingWithData已经被弃用 - initForReadingFromData返回nil

4

我有以下警告(Xcode 10.1 - iOS 12.1)

'initForReadingWithData:'已被弃用:自iOS 12.0起首次弃用-改用-initForReadingFromData:error:*

当我将方法更改为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];

如果unarchiver为空,则打印“error”。 - rmaddy
解压程序不是nil...并且没有错误 - 错误是nil。 - Frank Möller
3个回答

6
关闭 secureCoding 解决了问题。
[[NSKeyedUnarchiver alloc] initForReadingFromData:data error:&error]; 

unarchiver.requiresSecureCoding = NO;

[unarchiver decodeObjectForKey:...] 

在不需要向后兼容的情况下,最好不要关闭secureCoding。

1

这是因为你使用了decodeObjectForKey。如果你没有将requiresSecureCoding设置为NO,那么你必须使用decodeObjectOfClass:forKey:


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接