我有一个我希望能够打开并导出到文件的类。不需要编辑-这只是与我的应用程序的其他用户共享零件对象CoreData数据库的一种方式,因此我认为我不需要子类化的复杂性NSDocument
。
该类非常基础,具有两个属性String
和一个文件名,用于NSImage
引用应用程序沙箱中的图像。
最初,我想到了使用文档包,基本上是一个带有图像的文件夹(如果需要)和一个带有字符串和图像文件名的plist。现在,我倾向于创建一个仅用于导出和导入的类,该类用于NSCoding
将图像和字符串保存到文件中。
这是我不确定的内容:
NSImage
和String
属性的对象数组保存到单个文件中?我知道我可以很容易地保存图像,但是我可以将它们捆绑到一个文档中吗?是NSCoding
这样做的方法吗?NSImage
为NSData
吗?String
哪一部分是a和哪一部分是a NSImage
?我已经完成了研究!有很多有关保存图像或保存的信息NSDocument
,但我只想为用户提供一种简单的方法,即可将任意数据导入和导出应用程序的核心数据存储。
使用NSCoding
,可以保存每个对此协议具有内置支持的类,也可以添加它。两者NSImage
和-当然-都NSString
符合NSCoding
。您只需向NSCoding
自定义类添加支持,这非常简单:
- (void)encodeWithCoder:(NSCoder*)coder
{
[coder encodeObject:self.stringProperty forKey:@"String Property"];
[coder encodeObject:self.imageProperty forKey:@"Image Property"];
}
- (instancetype)initWithCoder:(NSCoder*)coder
{
self = [super init]; // or `-initWithCoder:, if it is supported
if (self)
{
self.stringProperty = [coder decodeObjectForKey:@"String Property"];
self.imageProperty = [coder decodeObjectForKey:@"Image Property"];
}
return self;
}
如果要将数据另存为属性列表文件,则只能使用属性列表类。NSString
是一个属性列表,但NSImage
不是-当然,您的自定义类也不是。因此,您必须将NSImage
和的自定义类的实例转换为的实例NSData
,因为这NSData
是一个属性列表。您可以使用– drum-roll –来做到这一点NSCoding
。只需使用带密钥的存档器。+archivedDataWithRootObject:
(NSKeyedArchiver
)的结果是的实例NSData
。使用的方法NSKeyedUnarchiver
。
但是,如果您不想使用通用属性列表工具进行编辑,则没有什么理由选择属性列表的文件格式。
因此,直接回答您的问题:
这是一个好主意吗?我在这里想念什么吗?
没关系
如何将具有NSImage和String属性的对象数组保存到单个文件中?
由于NSArray
符合NSCoding
并且是属性列表,因此这两种方法都可以立即使用。
我知道我可以很容易地保存图像,但是我可以将它们捆绑到一个文档中吗?
您是文件的所有者,并定义文件格式。前进吧。
NSCoding是这样做的方式吗?
是的。
我需要先将NSImage转换为NSData吗?
仅当您要保存属性列表文件时。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句