- 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/
我有一个矩形 NSImage A,我想缩放以嵌入到方形透明图像 B 中,保持 A 的比例。所以,最后我会得到一个带有矩形的方形图像。 我该如何构图?我的意思是,如何在另一个 NSImage 上绘制一个
我有一堆 NSImages,我将它们保存在 PDFDocument 中,作为 PDFPages。当我第一次插入 NSImage 时,NSImage 的大小以点 (72 dpi) 为单位,而(仅)NSI
我试图理解为什么 var tmp: Any = NSImage(byReferencingFile: somePath) var img: NSImage = tmp as NSImage 不会工作并
好吧,我很困惑,因为这应该很简单。 在 Xcode 5 中,我开始了一个新的 iphone 项目。在 ViewDidLoad 中,我开始输入: NSImage *图像 ... 实际上在“NSI”点……
我正在尝试将文件从 xcassets 加载到 NSImage,其中 Assets 名称是 Logo 。 我试过这个: let logoIcon = NSImage(named: "logo") 但我一
我正在编写一个简单的 MacRuby 应用程序。我有一个 NSView,它在调用 drawRect() 时在自身内部绘制图像。 在那个 NSView 子类中,我的 drawRect() 有(以及其他一
所以我有一个 NSImage *startingImage 它由带有灰色色彩空间的 NSBitmapImageRep 表示 我需要反转它的颜色,因此我将其转换为 CIImage CIImage *
首先,我知道我不应该使用 SQLite 数据库来存储图像,但我只存储非常小的网站图标。 我的问题是我尝试将这些图标插入数据库(似乎有效),我将图标转换为 NSData与 -tiffrepresenta
我正在尝试制作一个简单的基于文档的 cocoa 应用程序,可以在 pdf 文件中保存和加载图像。 对于保存部分,我正在使用 - (NSData *)dataOfType:(NSString *)typ
我使用 NSAffineTransform 类在其中心旋转了 NSImage,它可以工作。代码在这里: - (NSImage*)rotateImage: (NSImage*)myImage angle
我是 cocoa 和编程的新手,如果这是基本的东西,我很抱歉。 我正在使用 ARC。我有一个 NSImageView 组件,它由 DropZone 类控制。我将图像拖放到其中,但是一旦我尝试调用我得到
我想创建 NSScrollView 对象的 NSImage,这样我就可以将平面图形用于动画目的。 当我将 ScrollView 对象渲染为图形并将其添加回我的窗口时,它可以工作,但看起来非常糟糕,就像
到目前为止,我已经构建了一个应用程序,允许用户将图像拖放到 NSImageView 上。但是,我希望能够通过简单地单击任何图像并按住鼠标按钮来移动其位置来移动这些图像。 设置图像后如何操作 NSIma
我正在尝试打印 NSImage,但无法将其调整为正确的尺寸。我希望 NSImage 在任何足够大的纸张上打印为 4"x6"照片。这是我现在的代码。 var printView = NSImageVie
这可能是一个新问题,但我无法理解如何操作 NSImage 实例。 我正在尝试创建一个方法,该方法将采用 NSImage (一个图标),在其上绘制另一个 NSImage (复选标记),然后返回修改后的
由于 Cocoa-Java 已弃用,我正在将 Cocoa-Java 代码迁移到 Cocoa + JNI。该代码打印存储在文件中的图像。新的 Cocoa 代码基本上是: NSImage *image =
我正在尝试设置一个自定义拖动图标以在 NSTableView 中使用。一切似乎都正常,但由于我对 Quartz 缺乏经验,我遇到了问题。 - (NSImage *)dragImageForRowsWi
我有许多 NSImage,正在自定义 NSView 子类中渲染。当用户将鼠标放在这些图像上时,我希望放大这些图像,并且想知道执行此操作的最佳方法。 目前我正在使用 NSView 的 drawRect:
我的程序中有一个大型一维动态数组,它表示磁盘上的 FITS 图像,即它保存图像的所有像素值。数组的类型是double。目前,我只关心单色图像。 由于 Cocoa 不直接支持 FITS 格式,因此我使用
我想获取 NSImage.h 中定义的常量的图像文件,例如 NSImageNameGoRightTemplate 。我想复制并编辑其中一些。有谁知道这些图像位于哪里?我太笨了,在驱动器上找不到它们..
我是一名优秀的程序员,十分优秀!