objective-c - NSOutlineView 将多个项目拖放到单个 xml 文件 Finder
问题描述
我有一个NSOutlineView
拖放支持来重新排序行。现在我想将所选行的导出添加到 Finder 中的 opml 文件中。我设法设置NSFilePromiseProvider
during outlineView:pasteboardWriterForItem:
,每行都调用它。
我当前的测试环境包括所有相关拖放委托方法的虚拟方法:
NSDraggingSource
、NSFilePromiseProviderDelegate
、NSPasteboardItemDataProvider
、NSPasteboardTypeOwner
、NSPasteboardWriting
以及NSOutlineViewDataSource
.
使用最小的方法体并在调用它们时打印出来。
而且大多数时候委托方法只为特定的NSPasteboardType
like调用NSPasteboardTypeString
。
我怎样才能一次为所有选定的行提供一个承诺文件?最后,我想将例如 3 行从我的大纲视图拖到桌面,其中创建了 1 个文件“export.opml”。
解决方案
终于找到了一个有效的组合。原来outlineView:pasteboardWriterForItem:
不是实例化NSFilePromiseProvider
. 这对我有用:
ThisClass <NSFilePromiseProviderDelegate>
...
- (BOOL)outlineView:(NSOutlineView *)outlineView writeItems:(NSArray *)items toPasteboard:(NSPasteboard *)pasteboard {
NSFilePromiseProvider *prov = [[NSFilePromiseProvider alloc] initWithFileType:@"public.xml" delegate:self];
[pasteboard writeObjects:@[prov]];
return YES;
}
- (nonnull NSString *)filePromiseProvider:(nonnull NSFilePromiseProvider *)filePromiseProvider fileNameForType:(nonnull NSString *)fileType {
return @"myfile.opml";
}
- (void)filePromiseProvider:(nonnull NSFilePromiseProvider *)filePromiseProvider writePromiseToURL:(nonnull NSURL *)url completionHandler:(nonnull void (^)(NSError * _Nullable))completionHandler {
NSLog(@"%@ %@", url, filePromiseProvider.userInfo);
// write to file ...
completionHandler(nil);
}
推荐阅读
- javascript - 失败时的 Ajax 响应
- junit - 如何在 RCP 应用程序中使用 mockito 测试异常?
- python-3.x - 如何用熊猫过滤一列中的字母和数字
- javascript - 开玩笑模拟第三方对象
- r - R中的居中移动平均线(不使用包)
- node.js - VSCode 自动中断 Node.js 应用程序中的路径
- exception-handling - 如何使 lambda 中的函数在 lambda 体内使用的另一个函数中被调用
- google-api - 谷歌智能家居报告状态错误403
- python - 如何打开、修改和保存多个 .txt 文件?
- ruby-on-rails - Ruby on Rails/Devise - 如何将变量从 Registrations#Create 传递给 Mailer?