objective-c - NSFileWrapper 的 serializedRepresentation 返回不适当的大数据

标签 objective-c swift macos cocoa foundation

NSFileWrapperserializedRepresentation 在导入 Cocoa 框架时返回不适当的大数据,而不仅仅是导入 Foundation 框架。我怎样才能阻止 serializedRepresentation 返回如此庞大的数据。

我的场景:

我正在使用包(也称为文件夹)为 OS X 上的应用程序存储数据。

与仅导入 Foundation 相比,导入 Cocoa 时 serializedRepresentation 返回的数据大几个数量级。

将这些文件转换回包时,生成的包看起来是相同的。

这个实际的示例包是 22KB:

folder: [
    some.plist,
    folder: [
        1.png
    ]
]

导入 Cocoa 框架后,根据 serializedRepresentation 返回的数据创建的文件为 3.2MB

只有 Foundation 导入,根据 serializedRepresentation 返回的数据创建的文件是 32KB

最佳答案

长话短说:

删除 NSFileWrapper 的 Cocoa 实现添加的所有图标。

解释和例子:

Cocoa 框架在返回 serializedRepresentation 之前向文件添加某种图标。这会使生成的文件非常大。

要解决此问题:手动从每个文件中删除图标。

快速示例:

func removeIconsFromFileWrapper(wrapper: NSFileWrapper) {
    wrapper.icon = nil
    if wrapper.directory {
        for directory in wrapper.fileWrappers!.values {
            removeIconsFromFileWrapper(directory)
        }
    }
}

let thisFileURL = NSURL(fileURLWithPath: filePath)
if let fileWrapper = try?NSFileWrapper(URL: thisFileURL, options: NSFileWrapperReadingOptions.Immediate) {
    removeIconsFromFileWrapper(fileWrapper)
    let fileData = fileWrapper.serializedRepresentation
    let newFileURL = thisFileURL.URLByAppendingPathExtension("extension")
    do {
        try fileData?.writeToURL(newFileURL, options: NSDataWritingOptions.AtomicWrite)
        success = true
    } catch {
        // !!!: inform user that:
        NSLog("the file \(newFileURL) could not be saved")
    }
} else {
    NSLog("the file could not be read")
}

关于objective-c - NSFileWrapper 的 serializedRepresentation 返回不适当的大数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35881897/

相关文章:

iphone - 电子邮件在 ShareKit 中不起作用且没有错误

ios - 使用MapKit时,Swift中是否可以有可拖动的注释

ios - 将类型作为变量传递

ios - 获取iOS设备的焦距

cocoa - NSTextField 还是 NSTextView?

c# - Intellisense 停止在 Visual Studio Code、OSX 上运行

objective-c - (iOS/Objective-C)有条件向UIActionSheet添加不同按钮的更好方法吗?

iphone - iPhone SDK 如何在通讯录中创建联系人?

macos - 如何在 enaml 空间中获取 opencv 图像——这可能吗?

objective-c - 即使实现了 addSkipBackupAttributeToItemAtURL,仍然备份到 iCloud?