正如对今天如何做到这一点的更新摘要一样,这里是我必须做的分步指南:
使用 Xcode 从Cocoa 应用程序模板创建一个应用程序项目。
选中创建基于文档的应用程序并在“文档扩展名”中留下任何建议(如果您在此处删除文件扩展名,它将拒绝启用“下一步”按钮,因此我们稍后会这样做)。
单击项目的图标,转到Info选项卡和Document Types。
删除扩展字段的内容。我们的文件夹不需要特定的文件名后缀
将public.folder写入标识符字段。
在CFBundleTypeOSTypes数组中的 Additional document type properties 下添加一个条目fold (仅这四个小写字母)。不确定这是否有必要,但至少是正确的。
确保文档作为捆绑分发未选中。
为您的项目创建一个NSDocumentController
包含以下方法的子类。将其命名为例如ULIFolderDocumentController
。
-(void)openDocument:(id)sender
{
NSOpenPanel *panel = [NSOpenPanel openPanel];
[面板 setCanChooseFiles:NO];
[面板 setCanChooseDirectories:YES];
[面板 setAllowsMultipleSelection:NO];
[面板 beginWithCompletionHandler: ^( NSInteger 结果)
{
如果(结果 == NSFileHandlingPanelOKButton)
{
NSURL* selectedURL = [[panel URLs] objectAtIndex:0];
NSLog(@"选择的 URL: %@", selectedURL);
[self openDocumentWithContentsOfURL: selectedURL
显示:是
completionHandler: ^(NSDocument * _Nullable 文档, BOOL documentWasAlreadyOpen, NSError * _Nullable 错误)
{
NSLog(@"%spened 文档 %@ (%@)", (documentWasAlreadyOpen? "Reo" : "O"), document, error);
}];
}
}];
}
- 在您的应用程序委托的
-init
方法中添加一行来加载您的子类,而不是NSDocumentController
. 这很简单,只需请求共享对象:
[ULIFolderDocumentController sharedDocumentController]; // 用我们的覆盖系统的 NSDocumentController。
- 尝试一下!:)