将字符串数据从我的Cocoa应用拖到第三方Cocoa应用

将字符串数据从我的Cocoa应用拖到第三方Cocoa应用,cocoa,drag-and-drop,clipboard,pasteboard,Cocoa,Drag And Drop,Clipboard,Pasteboard,我想从tableview中拖出一行,将其放到Mac OS X 10.6中的任何其他NSTextField中,并删除一个文本字符串 在我的应用程序中(在NSTableView和NSBrowser之间)已经可以进行拖放操作,但是我没有成功地将任何数据放到粘贴板上,这些数据可以被源应用程序以外的应用程序接受 以下是我尝试过的代码,我认为当我进入其他NSTextField时,这些代码足以让“hello”一词被“粘贴”起来: -(BOOL) tableView:(NSTableView *)tableVi

我想从tableview中拖出一行,将其放到Mac OS X 10.6中的任何其他NSTextField中,并删除一个文本字符串

在我的应用程序中(在NSTableView和NSBrowser之间)已经可以进行拖放操作,但是我没有成功地将任何数据放到粘贴板上,这些数据可以被源应用程序以外的应用程序接受

以下是我尝试过的代码,我认为当我进入其他NSTextField时,这些代码足以让“hello”一词被“粘贴”起来:

-(BOOL) tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes     toPasteboard:(NSPasteboard *)pboard {

    [pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:self];
    [pboard setString:@"hello" forType:NSStringPboardType];

return YES;
}

//--

我从来没有得到光标,显示我的下降将被接受,它只是不工作

  • 我尝试过的事情:
    • 使用10.5版本的粘贴板标识符, NSStringPBoardType
    • 使用10.6版本,NSPasteboardTypeString
    • 将owner设置为nil,因为我不是在懒洋洋地提供数据
    • 使用键控归档程序:[pboard setData:[nsKeyedArchivedRootObject:@“Hello!!”]]
上述措施都没有奏效。我认为我的概念是正确的:“编码数据,告诉粘贴板你有什么,然后给它数据”,但由于其他应用程序无法识别它,我怀疑我没有告诉粘贴板正确的数据类型

我哪里做错了

谢谢,
Woody

将此添加到控制器类的
awakeFromNib

- (void)awakeFromNib {
    [tableView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:NO];
    // [tableView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES];

}
(这是假设您有一个连接到名为
tableView
的tableView的
IBOutlet
)。确保在
唤醒fromnib
或更高版本中执行此操作。(例如,如果您试图在控制器类的
init
方法中执行此操作,您的nib文件将尚未完全加载,并且您的
IBOutlet
将全部为
nil
,消息将无效)


默认情况下,大多数拖动操作将限于本地应用程序,而不是所有应用程序。
forLocal:
参数指定是指应用程序本地(在同一应用程序中)的拖动操作,还是指非本地(表示所有应用程序)的拖动操作。注释掉的行基本上就是tableView所做的。

就是这样。正如你所说,把那条线插进去,现在所有的引擎都启动了。谢谢