如何使用Core Data上传和存储Cocoa中的文件?

我有一个应用程序,我希望能够上传文件。 我可以想象,序列化数据,将其放入一个数组,然后序列化数组并将其放入核心数据,但这似乎并不正确。 我也可以想象将文件复制到应用程序的支持文件中,获取NSURL并存储数组或NSURL。

在任何情况下,NSURL不是核心数据中的属性选项,也不是NSArray。

另一个潜在的问题 – 我的目标是使一个iPhone应用程序和桌面应用程序同步。 所以我想从我的iPhone上传图片或从我的桌面上传文件,并一切正常工作。 我不确定复制文件是否与iPhone兼容。 我希望能够上传任何types的文件。

问题:
如何在iOS上存储图像?
如何在Mac OS X上存储文件?
我是否将二进制数据存储在核心数据中? 我是否将文件复制到目录并存储NSURL?

红利问题:
如何在iOD和Mac OS X应用程序之间进行同步?

澄清:
对这个问题的任何困惑抱歉。 这是一个更清洁的版本:

我的核心数据模型由一个名为NSString属性的“Entry”实体和一个与“File”实体的一对多关系组成。 此文件实体具有名称NSString属性和尚未确定的第二个属性。 这第二个属性可能(从我能想出)一个文件的可变形的NSData表示,NSURL的可变形的表示,指向某个文件(我仍然不满意如何变形的作品,所以我可能是错误的所有这一切…)或文件数据的二进制blob。 可能还有其他select,但重点是能够将文件从OS X或iOS上保存或“上传”到该程序中,并将这些数据库同步到一起。

我有一个OS X应用程序的表格视图,显示所有条目的名称。 select一个条目的名称,你将有一个它指向的文件列表。 双击该文件,它应该像Finder一样使用默认应用程序打开。 您还应该能够将文件从Core Data导出,并将其保存回应用程序之外的目录。

我也有一个iOS应用程序,允许我拍照或多张照片,将它们保存到“文件”实体,指向来自“Entry”实体(使用与OS X应用程序相同的Core Data模型)的文件,以及与我的OS X应用程序同步,因此这两个应用程序都具有相同的数据。

我希望能够解决这个问题。

谢谢您的帮助,

切特

我相信你对Core Data还不是很熟悉。 我强烈build议深入核心数据文档。

无论如何,根据我的理解,数据模型的可能实现可能如下所示: 在这里输入图像说明

您的用户将拥有File对象的NSSet,每个File对象将负责将名称和URL存储在Application Documents目录中。

至于你的第二个问题,我在那里还没有看到一个问题。

希望这有助于,干杯!

核心数据允许您设置属性的外部存储选项,然后IT将决定是否将对象存储在外部文件中。

所以你可以创build一个名为fileData (binary)的属性,并在你的子类中使用NSData ,然后简单地设置file.fileData = yourFileData ,Core Data将决定在哪里存储它。

不需要自己跟踪URL。 不要忘记存储某种标识符(文件名),以便您可以检索所需的文件。

编辑

顺便说一句,如果你只是想存储属性string的图像,那么使用可变形的属性可能会更好。 如果要自动转换为NSImage,UIImage或NSAttributedString(或其他可存档的对象),Transformable非常有用。

像这样设置文件

 NSData * data = [NSData dataWithContentsOfURL:...]; file.fileData = data; 

将数据写入文件使用

 bool result = [file.fileData writeToURL:atomically:]; 

为了在设备之间同步核心数据,我build议你看看我已经公布了关于iOS和OS X应用程序的核心数据和iCloud集成的细节。 这超出了本网站的答案范围。

http://ossh.com.au/design-and-technology/software-development/