我的应用程序(适用于Mac)会生成一些HTML ...然后需要将此HTML保存为.html文件。我正在尝试使用这样的NSSavePanel:
- (IBAction)saveFile:(id)sender{
NSSavePanel *savePanel = [NSSavePanel savePanel];
[savePanel setRequiredFileType:@"html"];
[savePanel setTitle:@"Save Code to File"];
if ([savePanel runModal] == NSOKButton)
{
[[_codeStore RTFFromRange:
NSMakeRange(0, [[_codeStore string] length])]
writeToURL:[savePanel URL] atomically:YES];
NSLog(@"saved");
}
}
我的问题是这不保存是纯文本。例如,当我在Web浏览器中打开生成的文件时,html会显示,但
{\ RTF1 \ ANSI \ ansicpg1252 \ cocoartf1157 \ cocoasubrtf700 {\ fonttbl \ f0 \ fswiss \ fcharset0 Helvetica;} {\ colortbl; \ red255 \ green255 \ blue255;} \ PARD \ tx560 \ tx1120 \ tx1680 \ tx2240 \ tx2800 \ tx3360 \ tx3920 \ tx4480 \ tx5040 \ tx5600 \ tx6160 \ tx6720 \ pardirnatural \ f0 \ fs24 \ cf0
位于页面顶部...
答案 0 :(得分:1)
问题似乎是
[[_codeStore RTFFromRange: NSMakeRange(0, [[_codeStore string] length])]
writeToURL: [savePanel URL]
atomically: YES];
您正在输出包含HTML的RTF文档。你需要
[[_codeStore string] writeToURL: [savePanel URL]
atomically: YES
encoding: NSUTF8StringEncoding
error: nil];
这将从NSAttributedString _codeStore
获取原始NSString并将其写入文件。
答案 1 :(得分:0)
我认为使用rtf编码导致问题,因为它可以使用转义序列写入超过8位。您可以尝试使用简单的nsstring写入文件的方式。
BOOL ok = [string writeToFile:path atomically:YES
encoding:NSUnicodeStringEncoding error:&error];