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