【发布时间】:2018-12-27 16:37:47
【问题描述】:
我试图简单地将使用 NSDocument 保存到 rtf。代码工作正常,但是当我尝试保存到不是窗口控制器的初始子视图控制器时,它会从模式中抛出一个错误,提示“文档”无法保存为“”。”
如何将文件保存到第二个视图控制器?
Window Controller
|
Login View Controller
| |
SidebarViewContoller ViewController1
|
TableViewController 2 Replaces VC1
Save TextView in this VC
我希望能够从 ViewController2 中的 textView 将数据写入 My NSDocument 并将其保存到桌面 就像您在 Pages 中所做的那样
这里是代码
// 文档.swift
class Document: NSDocument {
var text = NSAttributedString()
var documentViewController: DocumentViewController? {
return windowControllers[0].contentViewController as? DocumentViewController
}
override init() {
super.init()
// Add your subclass-specific initialization here.
}
override class var autosavesInPlace: Bool {
return true
}
override func makeWindowControllers() {
// Returns the Storyboard that contains your Document window.
let storyboard = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: nil)
let windowController = storyboard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier("Document Window Controller")) as! NSWindowController
self.addWindowController(windowController)
}
override func data(ofType typeName: String) throws -> Data {
// Save the text view contents to disk
if let textView = documentViewController?.textView {
let rangeLength = textView.string.count
textView.breakUndoCoalescing()
let textRange = NSRange(location: 0, length: rangeLength)
if let contents = textView.rtf(from: textRange) {
return contents
}
}
throw NSError(domain: NSOSStatusErrorDomain, code: unimpErr, userInfo: nil)
}
override func read(from data: Data, ofType typeName: String) throws {
if let contents = NSAttributedString(rtf: data, documentAttributes: nil) {
text = contents
}
}
//第二视图控制器
override func viewDidAppear() {
let document = self.view.window?.windowController?.document as! Document
textView.textStorage?.setAttributedString(document.text)
}
【问题讨论】:
-
使用应用的视图控制器层次结构和您想要发生的情况更新您的问题。听起来您想在文本视图中显示文档的内容。对吗?
-
是的,我想用 NSDocument 编写 textAttributedString。为了将 rtf 保存到桌面
-
View Controller 1 包含什么,它有什么作用?您需要提供有关整个应用程序的更多详细信息才能获得帮助。看起来您正在尝试构建 a tutorial I wrote to create a Mac rich text editor,但本教程旨在使用一个视图控制器。如果您使用多个视图控制器或尝试创建主从界面,您将对我在教程中编写的代码进行大量更改。
-
好的。是的,谢谢你的教程,我从中学到了很多。我试图让它尽可能简单,因为它是一个复杂的应用程序。基本上,当应用程序启动时,它会将您带到登录页面。登录后,您将被推送到 masterSplitViewController.,其中 leftDetailView 作为用于导航的 sideBarTableView。在从 sideBarTableView 中选择它后,我有一个文档 viewController。这个 ViewController 是我需要使用 NSDocument 在 textView 中写入数据的地方。我会调整层次结构以更清晰地反映。
标签: swift xcode cocoa nsdocument