我有一个NSOutlineView
,具有拖放支持,可以对行进行重新排序。现在,我想将所选行的导出添加到Finder中的opml文件中。我设法在NSFilePromiseProvider
期间设置了outlineView:pasteboardWriterForItem:
,每一行都需要调用它。
我当前的测试环境包括所有相关的拖放委托方法的伪方法:
NSDraggingSource
,NSFilePromiseProviderDelegate
,NSPasteboardItemDataProvider
,NSPasteboardTypeOwner
,NSPasteboardWriting
,以及NSOutlineViewDataSource
的源和目标委托方法。
使用最小的方法主体并在每次调用时打印输出。
而且大多数时候,委托方法只针对特定的NSPasteboardType
,例如NSPasteboardTypeString
。
如何为所有选定的行一次创建一个承诺文件?最后,我想从大纲视图中将3行拖到桌面上,其中创建了1个文件“ export.opml”。
答案 0 :(得分:0)
最后找到了可行的作品。事实证明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);
}