gpt4 book ai didi

objective-c - 使用 NSKeyedArchiver 解码然后编码未知类?

转载 作者:搜寻专家 更新时间:2023-10-30 19:47:46 25 4
gpt4 key购买 nike

我有一个来自 OS X 应用程序的项目文件,它是一个使用 NSKeyedArchiver 生成的 plist。我需要以编程方式更改其中的一个字符串。

基本上,它包含带有基础类的 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/

关于objective-c - 使用 NSKeyedArchiver 解码然后编码未知类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18388960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com