gpt4 book ai didi

swift - 将具有字符串和 NSImage 属性的类导出到文件

转载 作者:可可西里 更新时间:2023-11-01 00:51:16 25 4
gpt4 key购买 nike

我有一个类,我希望能够将其打开并导出到文件中。它不需要编辑 - 这只是与我的应用程序的其他用户共享部分对象 CoreData 数据库的一种方式,所以我认为我不需要子类化 NSDocument 的复杂性。

该类非常基础,具有两个属性 String 和一个引用应用沙箱中图像的 NSImage 的文件名。

最初,我想到了使用文档包,基本上是一个包含图像的文件夹(如果需要)和一个包含字符串和图像文件名的 plist。现在,我倾向于创建一个仅用于导出和导入的类,它使用 NSCoding 将图像和字符串保存到一个文件中。

以下是我不确定的地方:

  • 这是个好主意吗?我在这里遗漏了什么吗?
  • 我可以将具有 NSImageString 属性的对象数组保存到一个文件中吗?我知道我可以很容易地保存图像,但我可以将它们捆绑到一个文档中吗? NSCoding 是执行此操作的方法吗?
  • 是否需要先将 NSImage 转换为 NSData
  • 我的解码器如何知道文件的哪一部分是 String 而哪一部分是 NSImage

我已经做了我的研究!有很多关于保存图像或保存 NSDocument 的信息,但我只是想要一种简单的方法让用户导出和导入任意数据到我的应用程序的核心数据存储。

最佳答案

使用NSCoding,您可以保存每个内置支持此协议(protocol)的类,或者您添加它。 NSImage 和 - 当然 - NSString 都符合 NSCoding。您只需向您的自定义类添加 NSCoding 支持,which is pretty simple :

- (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 is a property list, but NSImage is not ——当然你的自定义类不是。所以你必须将 NSImage 的实例和你的自定义类转换为 NSData 的实例,因为 NSData 是一个属性列表。您可以使用 – drum-roll – NSCoding 来做到这一点。只需使用键控存档器。 +archivedDataWithRootObject: (NSKeyedArchiver) 的结果是 NSData 的实例。回到你使用 NSKeyedUnarchiver 的方式。

但如果您不想使用通用属性列表工具对其进行编辑,则没有理由选择属性列表的文件格式。

因此,直接回答您的问题:

is this a good idea? Am I missing something here?

没关系

can I save an array of objects with NSImage and String properties into a single file?

因为 NSArray 符合 NSCoding 并且是一个属性列表,所以这两种方法都可以开箱即用。

I know I can save an image, fairly easily, but can I bundle them up into a single document?

您是文件的所有者并定义文件格式。继续吧。

Is NSCoding the way to do this?

是的。

Do I need to convert the NSImage to NSData first?

仅当您要保存属性列表文件时。

关于swift - 将具有字符串和 NSImage 属性的类导出到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38047312/

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