NSFileWrapper 的 serializedRepresentation returns 数据过大
NSFileWrapper's serializedRepresentation returns inappropriately large data
NSFileWrapper
的 serializedRepresentation
returns 在 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 之前向文件添加某种图标。这会使生成的文件非常大。
解决此问题:手动删除每个文件的图标。
Swift 示例:
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")
}
NSFileWrapper
的 serializedRepresentation
returns 在 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 之前向文件添加某种图标。这会使生成的文件非常大。
解决此问题:手动删除每个文件的图标。
Swift 示例:
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")
}