gpt4 book ai didi

objective-c - 将文件从 NSTableView 拖到其他 osx 应用程序

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:30 27 4
gpt4 key购买 nike

我想从 NSTableView 行中拖动文件以将其复制到另一个应用程序(即 Finder)。我实现了本指南的前两个步骤(“配置您的表格 View ”、“开始拖动操作”)并认为这可以解决问题: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/TableView/Tasks/UsingDragAndDrop.html

但是,当我尝试拖动一行时,行文本会跟随我的鼠标移动,但释放时文件不会复制。这是我在初始化时发送到我的 UITableView 的内容:

#define librarySongDataType @"NSFileContentsPboardType"
- (void)awakeFromNib
{
[self setDraggingSourceOperationMask:NSUIntegerMax forLocal:YES]; // allow interapplication drags
[self registerForDraggedTypes:[NSArray arrayWithObject:librarySongDataType] ]; // NSFileContentsPboardType
}

下面是我在 NSTableView 的数据源(一个 NSArrayController)中处理拖动的方式:

- (BOOL)tableView:(NSTableView *)aTableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard
{
NSLog(@"writeRowsWithIndexes");
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:rowIndexes];
[pboard setData:data forType:librarySongDataType];
return YES;
}

需要说明的是,我并不是要将文件拖到我的表格 View 中,我只是要将文件拖出表格 View 。

最佳答案

首先,你写这行代码时引用了哪个文档?

 [self setDraggingSourceOperationMask:NSUIntegerMax forLocal:YES]; 

这没有意义。不要使用 NSUIntegerMax。使用定义的操作掩码 here .那里写着 NSUIntegerMax 代表一切,但你不应该使用它;苹果 future 可能会重新定义这个位。您应该使用 NSDragOperationCopy 或特定的东西。如果您从网页或书中复制了该行,您应该停止信任该书/网页。

其次,forLocal: 应该是NO 才能将数据传递给另一个应用程序; local 这里表示应用程序本地。

第三,不只是在

中设置归档数据
 [pboard setData:data forType:librarySongDataType];

考虑制作一个 NSFileWrapper 并使用 writeFileWrapper: 设置它,参见 here .这样您就可以指定要在 Finder 中创建的文件名。否则,系统不知道数据代表什么。

关于objective-c - 将文件从 NSTableView 拖到其他 osx 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4333357/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com