Запись атрибутивных строк построчно в файл RTF - PullRequest
0 голосов
/ 07 января 2020

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