objective-c – 使用NSKeyedArchiver解码然后编码未知类?
发布时间:2020-12-16 07:05:38 所属栏目:百科 来源:网络整理
导读:我从OS X应用程序获得了一个项目文件,该文件是使用NSKeyedArchiver生成的plist.我需要以编程方式更改其中的一个字符串. 基本上,它包含带有Foundation类的NSDictionary对象.但是有一个自定义类(GradientColor).我自己定义并尝试在initWithCoder中执行任何操作
我从OS X应用程序获得了一个项目文件,该文件是使用NSKeyedArchiver生成的plist.我需要以编程方式更改其中的一个字符串.
基本上,它包含带有Foundation类的NSDictionary对象.但是有一个自定义类(GradientColor).我自己定义并尝试在initWithCoder中执行任何操作:和encodeWithCoder:但目标应用程序崩溃尝试读取新生成的项目文件.因此初始化时无法正确处理nil值. 在使用initWithCoder初始化时,我能以某种方式知道哪些键对应于我的类:(NSCoder *)aDecoder,以便将它们编码为不变? 解决方法
我已经恢复了该类的实现(GradientColor).实际上,它存储了非常少量的数据:
@interface GradientColor : NSView <NSCoding> { float location; NSColor *color; } @end @implementation GradientColor - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeFloat:location forKey:@"location"]; [aCoder encodeObject:color forKey:@"color"]; } - (id)initWithCoder:(NSCoder *)aDecoder { self = [super init]; if (self) { location = [aDecoder decodeFloatForKey:@"location"]; color = [aDecoder decodeObjectForKey:@"color"]; } return self; } @end 我的版本什么都不做,但作为原始实现正确地序列化和反序列化.我在plist中看到了所需的键和它们的类型.现在我的CLI工具生成有效的项目文件. 在这里我发现了一篇关于NSKeyedArchive内部结构的好文章,它给了我很多帮助:http://digitalinvestigation.wordpress.com/2012/04/04/geek-post-nskeyedarchiver-files-what-are-they-and-how-can-i-use-them/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |