我的应用程序需要自定义文档支持,但我并没有从 xcode 中的文档模板开始。我确实设法通过以下本教程正确加载和保存数据:https ://www.brandpending.com/2016/02/21/opening-and-saving-custom-document-types-from-a-快速可可应用程序/ . 但是,一个问题是我的自定义图标没有显示在我的文件中!它仍然是一个空白页面图标:(。
我究竟做错了什么?
这是我的设置:
我的 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];
}];
}
谢谢!