Я пытаюсь записать ряд приписанных строк в файл 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];
}