将纯文本保存到文件(Obj-C)

时间:2012-04-09 14:08:30

标签: objective-c nssavepanel

我的应用程序(适用于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

位于页面顶部...

2 个答案:

答案 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];