我正在尝试将一系列属性字符串写入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];
}