iOS中储存的方式有很多种,SQL,CoreData,文件等等
其中归解档也是一种常见的持久化储存
swift归解有很多坑,这里总结一下
- 类名修改后解档会闪退
归档时的对象名称和解档后不一致就会找不到,直接闪退 - target名称修改后解档会闪退
原因是swift会以target名称创建命名空间,target改掉之后等于类名被改掉,同1
当项目有需要混淆且碰到归解档存储时,一定要避开模型和数据的混淆,以免发生上诉情况,
如已发生建议将target和模型数据名称改回去
或使用新Api来处理
@available(OSX 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *)
@nonobjc public static func unarchivedObject<DecodedObjectType>(ofClass cls: DecodedObjectType.Type, from data: Data) throws -> DecodedObjectType? where DecodedObjectType : NSObject, DecodedObjectType : NSCoding
@available(OSX 10.13, iOS 11.0, watchOS 4.0, tvOS 11.0, *)
@nonobjc public static func unarchivedObject(ofClasses classes: [AnyClass], from data: Data) throws -> Any?
当然归档本身也有很多的劣势:
- 容易丢失数据
- 性能不好
- 如果碰到上诉问题,可能需要删掉重新安装才能正常运行,体验相当不好
最后重要的事情说三次:
不要用归解档!
不要用归解档!
不要用归解档!