- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
NSFileWrapper
的 serializedRepresentation
在导入 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/
NSFileWrapper 的 serializedRepresentation 在导入 Cocoa 框架时返回不适当的大数据,而不仅仅是导入 Foundation 框架。我怎样才能阻止 serial
我是一名优秀的程序员,十分优秀!