我使用的是 macOS Monterey (12.0.1),而不是 iOS、objective-c、XCode 13
在為 arm64 構建應用程式后,我收到此日志訊息:
[general] *** -[NSKeyedUnarchiver validateAllowedClass:forKey:] allowed unarchiving safe plist type ''NSString' (0x1dcb1c848) [/System/Library/Frameworks/Foundation.framework]' for key 'NS.objects', even though it was not explicitly included in the client allowed classes set: '{(
"'NSDictionary' (0x1dcaee5d0) [/System/Library/Frameworks/CoreFoundation.framework]"
)}'. This will be disallowed in the future.
知道是什么原因造成的以及如何擺脫它嗎?
編輯:從 macOS Monterey 開始,在 arm64 上編譯的每個應用程式似乎都會發生這種情況。所以它可能是一個通用的蘋果錯誤
uj5u.com熱心網友回復:
感謝@OI Sen,它對 NSUnarchiver 有了更深入的了解。首先應該像這樣分配和初始化 NSKeyedUnarchiver:
NSError* err;
NSKeyedUnarchiver* unarchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:someData error:&err];
在我的特定情況下,我使用 NSSecure 編碼。因此,您必須在解碼物件上指定類。就我而言,它看起來像這樣
NSDictionary* someDict = [unarchiver decodeObjectOfClass:[NSDictionary class] forKey:NSKeyedArchiveRootObjectKey];
但是 NSDictionary 包含額外的字串。這就是日志訊息的原因。通過將 NSString 添加到解碼的類串列中,錯誤消失了。
NSDictionary* someDict = [unarchiver decodeObjectOfClasses:[[NSSet alloc] initWithArray:@[[NSDictionary class],[NSString class]]] forKey:NSKeyedArchiveRootObjectKey];
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363632.html
上一篇:Python路徑差異
下一篇:檢測內部Apple硬體鍵盤的布局
