ios - 如何在 Cocoa with Core Data 中上传和存储文件?

标签 ios objective-c cocoa core-data

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

无论如何,在 Core Data 中,NSURL 和 NSArray 都不是属性选项。

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

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

额外问题:
如何在 iOD 和 Mac OS X 应用程序之间同步?

澄清:
对于这个问题造成的任何困惑,我们深表歉意。这是一个更清晰的版本:

我的核心数据模型由一个“Entry”实体组成,该实体具有名称 NSString 属性以及与“File”实体的一对多关系。该文件实体具有名称 NSString 属性和尚未确定的第二个属性。第二个属性可能是(从我能想到的)某个文件的可转换 NSData 表示,指向某个文件的 NSURL 的可转换表示(我仍然对可转换的工作方式感到不舒服,所以我对这一切可能都是错的...),或文件数据的二进制 blob。可能还有其他选择,但重点是能够从 OS X 或 iOS 保存或“上传”文件到此程序,并将数据库同步在一起。

我有一个 OS X 应用程序,带有一个 TableView ,显示所有条目的名称。选择条目的名称,您将看到它指向的文件列表。双击该文件,它应该使用默认应用程序打开,就像使用 Finder 一样。您还应该能够从 Core Data 中导出文件并将它们保存回应用程序外部的目录中。

我还有一个 iOS 应用程序,它允许我拍摄一张或多张照片,将它们保存到"file"实体,从“条目”实体指向这些文件(使用与 OS X 应用程序相同的核心数据模型) ),并与我的 OS X 应用程序离线同步,这样两个应用程序都具有相同的数据。

我希望事情能够澄清。

感谢您的帮助,

切特

最佳答案

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

因此,您将创建一个名为 fileData (binary) 的属性,并在子类中使用 NSData,然后只需设置 file.fileData = yourFileData > 核心数据将决定将其存储在哪里。

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

编辑

顺便说一句,如果您只想存储属性字符串的图像,那么最好使用可转换属性。如果您希望自动转换为 NSImage、UIImage 或 NSAttributedString(或其他一些可存档对象),Transformable 非常有用。

像这样设置文件

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

要将数据写入文件,请使用

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

关于ios - 如何在 Cocoa with Core Data 中上传和存储文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21128593/

相关文章:

ios - 测试字典数组中是否存在具有特定属性的对象

arrays - 如何在我的 UI 测试中从 XCUIApplication 访问 NSApplicationDelegate

objective-c - NSTableView。如何覆盖自动滚动行为?

ios - 日期选择器看起来像文本字段的输入一样被压扁

ios - 以编程方式确定 iPad 模态视图的大小

iphone - dateFromString 不适用于我提供的字符串

ios - 应用程序恢复后 URLSession 代表不工作

ios - Facebook SDK IOS xcode

objective-c - 类型 "struct objc_method"的定义不完整

macos - 是否可以为付费 Mac 应用程序提供促销代码(无应用内购买)