NSOutlineView 将多个项目拖放到单个 xml 文件 Finder
NSOutlineView drag-n-drop multiple items to single xml file Finder
我有一个 NSOutlineView
支持拖放以重新排序行。现在我想将所选行的导出添加到 Finder 中的 opml 文件。我已经在 outlineView:pasteboardWriterForItem:
期间成功设置了 NSFilePromiseProvider
,每一行都会调用它。
我当前的测试环境包括所有相关拖放委托方法的虚拟方法:
NSDraggingSource
、NSFilePromiseProviderDelegate
、NSPasteboardItemDataProvider
、NSPasteboardTypeOwner
、NSPasteboardWriting
,以及 NSOutlineViewDataSource
.
的源和目标委托方法
使用最小的方法体并在调用时打印出来。
大多数时候,委托方法只针对特定的 NSPasteboardType
调用,比如 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);
}
我有一个 NSOutlineView
支持拖放以重新排序行。现在我想将所选行的导出添加到 Finder 中的 opml 文件。我已经在 outlineView:pasteboardWriterForItem:
期间成功设置了 NSFilePromiseProvider
,每一行都会调用它。
我当前的测试环境包括所有相关拖放委托方法的虚拟方法:
NSDraggingSource
、NSFilePromiseProviderDelegate
、NSPasteboardItemDataProvider
、NSPasteboardTypeOwner
、NSPasteboardWriting
,以及 NSOutlineViewDataSource
.
的源和目标委托方法
使用最小的方法体并在调用时打印出来。
大多数时候,委托方法只针对特定的 NSPasteboardType
调用,比如 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);
}