gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 05:37:03 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com