我使用简单的导入/导出功能扩展了一个应用程序,该功能使用plist文件来存储导出的对象。要保存对象,我使用NSDictionary
和writeToURL
方法(沙盒应用)。
代码的相关部分如下所示:
savePanel.beginSheetModalForWindow(self.view.window!) { (result) in
savePanel.orderOut(nil)
if result == NSFileHandlingPanelOKButton {
let saveURL = savePanel.URL!
let values = NSMutableDictionary()
for propertyDescription in selectedEvent.entity.properties {
let propertyName = propertyDescription.name
values[propertyName] = selectedEvent.valueForKey(propertyName)
}
if !values.writeToURL(saveURL, atomically: true) {
// error handling?
}
}
}
现在我想知道是否有办法获取详细的错误消息如果保存文件失败了?
答案 0 :(得分:0)
我没有意识到答案很简单。 NSDictionary
不是使用NSPropertyListSerialization
上的辅助方法,而是NSData
提供了序列化反序列化plist的完整方法集。
使用此类,将创建一个NSData
对象,并将此对象写入磁盘。编写savePanel.beginSheetModalForWindow(self.view.window!) { (result) in
savePanel.orderOut(nil)
if result == NSFileHandlingPanelOKButton {
let saveURL = savePanel.URL!
let values = NSMutableDictionary()
for propertyDescription in selectedEvent.entity.properties {
let propertyName = propertyDescription.name
values[propertyName] = selectedEvent.valueForKey(propertyName)
}
do {
let data = try NSPropertyListSerialization.dataWithPropertyList(values, format: .XMLFormat_v1_0, options: NSPropertyListWriteOptions())
try data.writeToURL(saveURL, options: [.DataWritingAtomic])
} catch let error as NSError {
dispatch_async(dispatch_get_main_queue()) {
self.view.window!.presentError(error)
}
} catch {
let unknownError = NSError(domain: kAppErrorDomain, code: 201, userInfo: [
NSLocalizedDescriptionKey: "Unknown error while writing the export file."
])
dispatch_async(dispatch_get_main_queue()) {
self.view.window!.presentError(unknownError)
}
}
}
}
对象可提供所有必需的错误处理。
这里是上面的代码示例,其中包含新的实现:
<Button>
<Button.Template>
<ControlTemplate TargetType="Button">
<ContentPresenter />
</ControlTemplate>
</Button.Template>
<Rectangle Width="100"
Height="100"
Fill="Red" />
</Button>