【问题标题】:Document Type Icon not showing on custom file MacOS文档类型图标未显示在自定义文件 MacOS 上
【发布时间】:2017-02-07 12:01:53
【问题描述】:

我的应用程序需要自定义文档支持,但我并没有从 xcode 中的文档模板开始。我确实设法通过遵循本教程的其他内容来正确加载和保存数据:https://www.brandpending.com/2016/02/21/opening-and-saving-custom-document-types-from-a-swift-cocoa-application/。但是,一个问题是我的自定义图标没有显示在我的文件中!它仍然是一个空白页面图标:(。

我做错了什么?

这是我的设置:

我的 HSDocument 代码:

-(BOOL)readFromURL:(NSURL *)url ofType:(NSString *)typeName error:(NSError * _Nullable __autoreleasing *)outError
{
    NSDictionary *myDictionary = (NSDictionary*) [NSKeyedUnarchiver   unarchiveObjectWithFile:[url path]];
    self.archive = myDictionary;

    return YES;
}

-(BOOL)writeToURL:(NSURL *)url ofType:(NSString *)typeName error:(NSError * _Nullable __autoreleasing *)outError
{
    [NSKeyedArchiver archiveRootObject:self.archive toFile:[url path]];

  return YES;
}

这是我将数据加载/保存到文件的方式:(我不希望它被普通菜单项触发)

- (void)onLoadFile
{
    NSOpenPanel *panel = [NSOpenPanel openPanel];
    [panel setCanChooseFiles:YES];
    [panel setCanChooseDirectories:YES];
    [panel makeKeyAndOrderFront:nil];
    [panel setLevel:NSStatusWindowLevel];
    [panel setCanCreateDirectories:NO];


    [[self.preferencesWindow window] setLevel:kCGNormalWindowLevel];

    [panel setFrameOrigin:CGPointZero];

    [panel beginWithCompletionHandler:^(NSInteger result)
    {
        if (result == NSFileHandlingPanelOKButton)
        {
            for (NSURL *url in [panel URLs])
            {
                NSError *error;
                HSDocument *document = [HSDocument new];

                [document readFromURL:url ofType:@"my-identifier" error:&error];
                [self setPresetsFromCollection:document.archive onStartup:NO];
            }
        }

        [[self.preferencesWindow window] setLevel:NSStatusWindowLevel];
    }];
}

- (void)onSaveFile
{
    NSSavePanel *panel = [NSSavePanel savePanel];
    [panel setMessage:@"Please select a location to save the file."];
    [panel setAllowsOtherFileTypes:YES];
    [panel setExtensionHidden:YES];
    [panel setTitle:@"Saving file..."]; // Window title
    [panel setCanCreateDirectories:YES];

    [[self.preferencesWindow window] setLevel:kCGNormalWindowLevel];

    [panel beginWithCompletionHandler:^(NSInteger result)
    {
        if (result == NSFileHandlingPanelOKButton)
        {
            NSURL* theUrl = [panel URL];
            theUrl = [theUrl URLByAppendingPathExtension:@"hej"];

            HSDocument *document = [HSDocument new];
            document.archive = [self collectPresetsToSave];
            NSError *error;
            [document writeToURL:theUrl ofType:@"my-identifier" error:&error];
        }

        [[self.preferencesWindow window] setLevel:NSStatusWindowLevel];
    }];
}

谢谢!

【问题讨论】:

    标签: macos nsdocument uti nssavepanel document-types


    【解决方案1】:

    在 Mojave 中遇到同样的问题,Xcode 10.1。

    最终解决问题的方法是使用 .ICNS 文件作为 Document Types 中的图标。只要我尝试使用 PNG 文件,这些文件就不会显示在 finder 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      • 1970-01-01
      • 2020-11-10
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多