如何使用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/