更新:这是关于在 Xcode 中使用基于文档的应用程序模板创建的 Mac 应用程序,我正在覆盖
override func readFromFileWrapper(fileWrapper: NSFileWrapper, ofType typeName: String, error outError: NSErrorPointer) -> Bool
我正在尝试从 NSFileWrapper 读取文件,似乎我无法摆脱其中至少有一个文件!
。
首先,我试过
if let rtfData = files["textFile.rtf"]?.regularFileContents,
newString = NSMutableAttributedString(data: rtfData, options: [NSDocumentTypeDocumentAttribute : NSRTFTextDocumentType], documentAttributes: nil, error: nil) {
text = newString
return true
}
所以我得到这个错误
可选类型“NSData?”的值 未拆封;你的意思是用'!' 或者 '?'?
而且我必须要么强制转换,要么必须在 NSMutableAttributedString 的初始化程序 ( )regularFileContents as NSData!
中强制解包它。data: rtfData!
所以我尝试了
let rtfData = files["textFile.rtf"]?.regularFileContents
if (rtfData != nil) {
if let newString = NSMutableAttributedString(data: rtfData, options: [NSDocumentTypeDocumentAttribute : NSRTFTextDocumentType], documentAttributes: nil, error: nil) {
text = newString
return true
}
}
这导致
找不到接受类型为“(数据:NSData??,选项:[String:String],documentAttributes:nil,错误:nil)”的参数列表的“NSMutableAttributedString”类型的初始化程序
所以我必须将初始化程序更改为data: rtfData!!
,我什至不确定这意味着什么。
或者,我可以强制转换regularFileContents as NSData?
,然后我只能!
在初始化程序中使用一个。
更新:这是我发布后尝试的另一件事。我认为双重?
输入NSData??
可能是由于我选择性地打开了 NSFileWrapper (files["textFile.rtf"]?
)所以我尝试了这个:
if let rtfWrapper = files["textFile.rtf"],
rtfData = rtfWrapper.regularFileContents,
newString = NSMutableAttributedString(data: rtfData, options: [NSDocumentTypeDocumentAttribute : NSRTFTextDocumentType], documentAttributes: nil, error: nil) {
text = newString
return true
}
编译器仍然希望我强制打开 NSData。
我非常困惑。
什么是NSData??
,为什么它是“双重”可选的,为什么它是 的结果.regularFileContents
,以及我怎样才能安全地,不用!
-ing 一路获取 NSData 并将其传递给 NSMutableAttributedString 的初始化器?
另一个更新
我想也许这个files
常量可能是另一个可选包装的来源:
let files = fileWrapper.fileWrappers
但是编译器不会让我if let
这样做。例如,如果我尝试,
if let files = fileWrapper.fileWrappers {
if let rtfFile = files["textFile.rtf"] {
if let rtfData = rtfFile.regularFileContents {
if let newString = NSMutableAttributedString(data: rtfData, options: [NSDocumentTypeDocumentAttribute : NSRTFTextDocumentType], documentAttributes: nil, error: nil) {
text = newString
return true
}
}
}
}
编译器给出了这个错误:
条件绑定中的绑定值必须是可选类型
关于fileWrapper.fileWrappers
变量是方法的fileWrapper
参数,即
override func readFromFileWrapper(fileWrapper: NSFileWrapper, ofType typeName: String, error outError: NSErrorPointer) -> Bool