- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个类,我希望能够将其打开并导出到文件中。它不需要编辑 - 这只是与我的应用程序的其他用户共享部分对象 CoreData 数据库的一种方式,所以我认为我不需要子类化 NSDocument
的复杂性。
该类非常基础,具有两个属性 String
和一个引用应用沙箱中图像的 NSImage
的文件名。
最初,我想到了使用文档包,基本上是一个包含图像的文件夹(如果需要)和一个包含字符串和图像文件名的 plist。现在,我倾向于创建一个仅用于导出和导入的类,它使用 NSCoding
将图像和字符串保存到一个文件中。
以下是我不确定的地方:
NSImage
和 String
属性的对象数组保存到一个文件中吗?我知道我可以很容易地保存图像,但我可以将它们捆绑到一个文档中吗? 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/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!