NSFileWrapper
' s serializedRepresentation
在Cocoa框架而不是仅导入Foundation框架时返回不适当的大数据。如何阻止serializedRepresentation
返回这些庞大的数据。
我的情景:
我使用软件包(即文件夹)在OS X上存储应用程序的数据。
与导入基金会时相比,当导入Cocoa时,serializedRepresentation返回的数据要大几个数量级。
将这些文件转换回包时,生成的包似乎完全相同。
这个实际的示例包是22KB:
folder: [
some.plist,
folder: [
1.png
]
]
导入Cocoa框架后,根据serializedRepresentation
返回的数据创建的文件为3.2MB
仅导入Foundation时,由serializedRepresentation
返回的数据创建的文件为32KB
答案 0 :(得分:0)
删除NSFileWrapper的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")
}