Значок типа документа не отображается в пользовательском файле MacOS

Мое приложение должно иметь поддержку пользовательских документов, но я не начал с шаблона документа в 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];
    }];
}

Спасибо!


person user1974507    schedule 07.02.2017    source источник


Ответы (1)


Была такая же проблема в Мохаве, Xcode 10.1.

В конечном итоге проблема была решена путем использования файла .ICNS для значка в разделе Типы документов. Пока я пытался работать с PNG-файлами, они никогда не отображались в Finder.

person Agam    schedule 24.12.2018