Cocoa可查看和拖放

Cocoa可查看和拖放,cocoa,drag-and-drop,nsoutlineview,Cocoa,Drag And Drop,Nsoutlineview,我最近启动了另一个没有帐户的线程,所以我在这里用一个帐户重新发布了这个问题,这样我就可以编辑程序的当前链接,这样其他用户就可以遵循这个。我还更新了下面的代码。这是我原来的问题: 我在Outlineviews和DND上读了另一篇文章,但我的程序无法运行。在这篇文章的底部是我的项目的一个zip链接。它非常基本,只有一个大纲视图和按钮。我希望它接收被丢弃的文本文件,但我的代码或连接有问题。我试着按照苹果的示例代码进行拖放,但我遗漏了一些东西。区别在于我的程序是基于文档的程序,而他们的示例不是。我将文件

我最近启动了另一个没有帐户的线程,所以我在这里用一个帐户重新发布了这个问题,这样我就可以编辑程序的当前链接,这样其他用户就可以遵循这个。我还更新了下面的代码。这是我原来的问题:


我在Outlineviews和DND上读了另一篇文章,但我的程序无法运行。在这篇文章的底部是我的项目的一个zip链接。它非常基本,只有一个大纲视图和按钮。我希望它接收被丢弃的文本文件,但我的代码或连接有问题。我试着按照苹果的示例代码进行拖放,但我遗漏了一些东西。区别在于我的程序是基于文档的程序,而他们的示例不是。我将文件的所有者设置为接收委托操作,因为这是我处理拖放操作的代码以及按钮操作的位置。这可能是一个简单的错误,所以请有人看看它,告诉我我做错了什么?以下是指向该文件的链接:

您没有响应NSOutlineView的拖动验证消息

已实施
tableView:validateDrop:proposedRow:proposedChildIndex:
。正如我在那个问题上指出的,当您的表视图是大纲视图时,这是错误的;NSOutlineView不会发送表视图拖动验证消息,只发送大纲视图拖动验证消息

此后,您将拖动验证方法更改为声明如下:

-(NSDragOperation)大纲视图:(NSOutlineView*)视图
validateDrop:(id)信息
提议行:(int)行
建议儿童指数:(NSInteger)指数
但实际上没有任何东西发出这样的信息

请记住,NSOutlineView很少处理行索引,因为随着父行的展开和折叠,这些索引可能会更改。它处理的是“项”,通常是模型对象

因此,正确的验证方法是:

-(NSDragOperation)大纲视图:(NSOutlineView*)视图
validateDrop:(id)信息
ProposeItem:(id)项目
建议儿童指数:(NSInteger)指数
请注意选择器的第三个组件的名称,以及与之配套的参数的类型和名称


应用此更改后,您的数据源将验证删除。

“我希望它接收被删除的文本文件”这是什么意思?放在大纲视图或应用程序的Dock互动程序上?另外,不要忘记检查
[super init]
的结果。不要以为它成功了。
init
方法中对实例变量的所有赋值都应该在
if(self)
块中。(您也可以将分配集成到条件中,这在Cocoa代码中很常见,但这取决于您的样式首选项。)
- (NSDragOperation)outlineView:(NSOutlineView*)view
                validateDrop:(id <NSDraggingInfo>)info
                 proposedRow:(int)row
          proposedChildIndex:(NSInteger)index
- (NSDragOperation)outlineView:(NSOutlineView*)view
                validateDrop:(id <NSDraggingInfo>)info
                proposedItem:(id)item
          proposedChildIndex:(NSInteger)index