将属性字符串逐行写入RTF文件

我正在尝试将一系列属性字符串写入RTF文件,在我的应用程序运行的各个位置逐行运行(您可以将其视为仅具有属性的日志数据)。文件创建就很好,并且似乎所有数据都已写入文件,但是当我打开RTF文件时,仅出现写入文件的第一行。我怀疑第一次写入时会向该文件中写入一些内容,这些内容实际上结束了RTF文件,但是我不太确定那是什么。

- (void) writeLineWithSizeAndStyle: (NSString *) line : (CGFloat)fontSize : (NSFontTraitMask) traits {
    NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:line];
    NSFileHandle              *fileHandle = [NSFileHandle fileHandleForupdatingAtPath:filePath];
    NSFontManager             *fm = [NSFontManager sharedFontManager];
    NSRange                   range = [line rangeOfString:line];
    NSFont                    *font = [NSFont systemFontOfSize:fontSize];

    font = [fm convertFont:font toHaveTrait:traits];
    [attrString addAttribute: NSFontAttributeName value:font range:range];
    NSData *rtfData = [attrString RTFFromRange:NSMakeRange(0,attrString.length) documentAttributes:@{}];

    // Go the the end of the file,write the data,and close the file
    [fileHandle seekToEndOfFile];
    [fileHandle writeData: rtfData];
    [fileHandle closeFile];
}

在将每个属性字符串转换为NSData时,是否需要有效地告诉RFT在写入时不要终止文件?

谢谢!

更新: 这是我在评论部分中提出的解决方案2的代码。这对类对象(playByPlay)中的实例变量进行操作,该变量简单地将每行添加到整个“日志”中。这很好用,但实际上只不过是足够小的文件的解决方案。

- (void) writeLineWithSizeAndStyle: (NSString *) line : (CGFloat)fontSize : (NSFontTraitMask) traits {
    NSFileHandle    *fileHandle = [NSFileHandle fileHandleForupdatingAtPath:filePath];
    NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:line];
    NSRange range = [line rangeOfString:line];
    NSFontManager   *fm = [NSFontManager sharedFontManager];
    NSFont  *font = [NSFont systemFontOfSize:fontSize];
    font = [fm convertFont:font toHaveTrait:traits];

    [attrString addAttribute: NSFontAttributeName value:font range:range];

    [playByPlayText appendAttributedString:attrString];
    NSData *rtfData = [playByPlayText RTFFromRange:NSMakeRange(0,playByPlayText.length) documentAttributes:@{}];

    [fileHandle writeData: rtfData];
    [fileHandle closeFile];
}
wz7181 回答:将属性字符串逐行写入RTF文件

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2809271.html

大家都在问