我有一个基于文档的Cocoa应用程序,启用了绑定;它应该是一个文本片段管理器。我正在使用Xcode 6.2开发系统版本10.9。主文档窗口具有分割视图,其中包含NSTableView
和NSTextView
。数据显示在此表中的模型对象我们将调用 Snippets ,其文本显示在文本视图中;其他数据,如创建和修改日期,也显示在表中。这个数组由NSArrayController
的子类管理,而数组又是另一个模型对象中的实例变量(让我们称之为 Shoebox ,其中包含 Snippet <的集合/ strong> s)它本身可以是文档模型中此类 Shoebox 对象的数组成员。
我在窗口控制器上为此视图创建了一个类别,其中包含所有粘贴板操作的源代码。我copy
,cut
和paste
效果很好。我所做的是将模型对象的数据转换为属性列表字典(甚至是这类字典的数组),然后将数据作为片段类型@"snpt"
放在粘贴板上,这是我唯一的粘贴板类型我在这个应用程序中声明。
我在此粘贴板类别文件中实现了tableView: writeRowsWithIndexes: toPasteboard
,使我的窗口控制器成为表格视图的数据源,并实施了draggingEntered:
和performDragOperation:
。
事实上,我可以从一个打开的文档中取出一个表格行并将其拖出它所来自的表格,但是我不能将它放在代码片段表中以获取另一个打开的文档,它只是快速返回。随着牙齿出现。
当我有一个带有表视图作为子视图的文档窗口而窗口上没有任何其他内容时,这种拖放设计对我来说很好。我正在计算目标窗口无法弄清楚它正在获取什么样的数据,谁在发送它,或者哪个视图应该接收丢弃。否则,我在这一点上很难过。