ios - 不推荐使用 unarchiveobjectwithdata
问题描述
我现在尝试更新我的应用程序。并看到 unarchiveobjectwithdata:' 已弃用。我该如何解决?
我有课
@interface Favorite : NSObject <NSSecureCoding> //NSCoding NSSecureCoding
@property (nonatomic) NSDate *wikiDate;
@property (nonatomic) FavoriteType type;
- (id) initWithDate:(NSDate *) date type:(FavoriteType) type;
- (id) initNilFavorite;
- (BOOL) isNilFavorite;
- (id) initWithCoder:(NSCoder *)aDecoder;
- (void) encodeWithCoder:(NSCoder *)aCoder;
@end
我有二等舱
@interface Settings : NSObject
+ (Settings *) sharedInstance;
@property (nonatomic) NSMutableArray *favorites;
// favorites part
- (BOOL) isFavorite:(NSDate *) date type:(FavoriteType) type;
- (void) addToFavorites:(NSDate *) date type:(FavoriteType) type;
- (void) removeFromFavorites:(NSDate *) date type:(FavoriteType) type;
- (void) groupFavorites;
- (void) saveSettings;
@end
当我将最爱保存在 settigns 中时
- (void) saveFavorites{
NSString* filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"favorites"];
NSError* error;
NSData* codedData = [NSKeyedArchiver archivedDataWithRootObject:self.favorites requiringSecureCoding:NO error:&error];
if(error!=nil) {
NSLog(@"Eror when try to archive favorites!!!!");
}
else {
[codedData writeToFile:filePath atomically:YES];
}
}
我尝试加载
- (void) loadFavorites{
NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"favorites"];
NSData *data = [NSData dataWithContentsOfFile:filePath];
if (data) {
self.favorites = [NSKeyedUnarchiver unarchiveObjectWithData:data];
}
}
一切正常,但现在我必须将unarchiveObjectWithData替换为unarchivedArrayOfObjectsOfClass
self.favorites 是最喜欢的类的 MuttableArray!
我试过veriants:
NSSet *allowedClasses = [NSSet setWithObjects:[NSMutableArray class],[Favorite class], nil];
NSMutableArray *encodedData = [NSKeyedUnarchiver unarchivedObjectOfClasses:allowedClasses fromData:data error:&error];
和
NSData *encodedData = [NSKeyedUnarchiver unarchivedObjectOfClass:[NSArray class] fromData:data error:&error];
和
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingFromData:data error:&error];
[unarchiver setRequiresSecureCoding:NO];
[unarchiver decodeObjectOfClass:[Favorite class] forKey:@""];
[unarchiver finishDecoding];
注意工作:(
请帮我
解决方案
您可以使用
[ NSKeyedUnarchiver unarchivedObjectOfClass:[ NSObject class ] fromData:data error:&error ];
它适用于日志中的警告
[基础] *** -[NSKeyedUnarchiver validateAllowedClass:forKey:]:NSSecureCoding 允许的类列表包含 [NSObject 类],它通过允许隐式解码任何 Objective-C 类来绕过安全性。考虑通过仅列出您希望解码的类或比 NSObject 更具体的基类来减少解码期间允许的类的范围。这将成为未来的错误。允许的类列表:{("'NSObject' (0x1d9e91e08) [/usr/lib]" )}
更好的是使用
[ NSKeyedUnarchiver unarchivedObjectOfClasses:[ NSSet setWithObjects:[ NSArray class ], [ Favorite class ], nil ] fromData:data error:&error ];
您可能需要 [ NSDate class ] 或其他包含在您的“Favorite”类中的东西
推荐阅读
- r - geom_area 默认绘制堆叠区域
- c# - 当源为空时如何防止 AutoMapper 初始化目标 JObject 成员
- gcc - x86 汇编程序如何知道从哪里开始执行?
- r - 如何在 Rmarkdown 的表格中添加 fontawesome 图标?
- node.js - 使用 CouchDB 和 Node.JS (Nano) 的忘记密码功能
- javascript - 引导示例轮播代码不切换幻灯片
- react-native - 当组件以 React Native 呈现时,动态添加组件道具
- object - Dart:如何将对象数组转换为哈希图数组?
- pandas - 如何获取日期以及我执行的功能?
- eclipse - 为什么 Eclipse 加载速度比 Canopy 快?