NSDocument чтение данных RTFD

Я работаю над текстовым редактором и хочу добавить поддержку RTFD. После добавления типа файла RTFD в мой Info.plist я получил сообщение о том, что «readFromFileWrapper:ofType:error: необходимо переопределить, чтобы ваше приложение могло обрабатывать пакеты файлов».

Я просмотрел документацию и нашел кое-что, но мне не удалось сделать все... Может ли кто-нибудь быть таким добрым и помочь мне, пожалуйста?

- (BOOL)readFromFileWrapper:(NSFileWrapper *)fileWrapper ofType:(NSString *)typeName error:(NSError **)outError {

    if ([typeName isEqualToString:@"Rich Text with Attachments"])  {   
        NSLog(@"Its RTFD");
        //it gets to here but I don't know how to load the rtfd data then :(
}

ofType:typeName]    return YES; }

Любая помощь приветствуется :)


person Pripyat    schedule 15.02.2010    source источник


Ответы (2)


К счастью, RTFD особенно прост. Ознакомьтесь с методами readRTFDFromFile: и writeRTFDToFile:atomically: метода NSText.

Из справочника по классу NSText< /а>:

прочитатьRTFDFromFile:

Пытается прочитать файл RTFD по path, возвращая YES в случае успеха и NO в противном случае.

- (BOOL)readRTFDFromFile:(NSString *)path

Обсуждение
путь должен быть путем к файлу .rtf или файловой оболочке .rtfd, а не к файлу RTF в файловой оболочке .rtfd.

Если вы едете из NSURL, сделайте что-то вроде этого:

[textView readRTFDFromFile:[[self fileURL] path]];

На всякий случай сначала позвоните по номеру [[self url] isFileURL].

person Carl Norum    schedule 15.02.2010
comment
Я попробовал ваш фрагмент и добился следующего: окно NSDocument было открыто, заголовок был обновлен до имени файла RTFD, но NSTextView по-прежнему пуст. Это мой код: if ([typeName isEqualToString:@Rich Text with Attachments]) { NSString *urlString = [[self fileURL] absoluteString]; NSLog(@%@,urlString); [textView readRTFDFromFile:urlString]; вернуть ДА; } - person Pripyat; 16.02.2010
comment
@ Дэвид, тебе не нужна строка URL, только путь к файлу. Я сделал быстрое тестовое приложение, и оно у меня сработало: [textView readRTFDFromFile:@"/Users/carl/Desktop/file.rtfd"] - person Carl Norum; 16.02.2010
comment
причина, по которой у меня есть строка URL-адреса, заключается в том, что мое приложение основано на структуре NSDocument, NSDocument возвращает URL-адрес только как путь к файлу, который затем я преобразовал в строку... - person Pripyat; 16.02.2010
comment
Я сделал это: NSString *urlString = [[self fileURL] absoluteString]; а затем загрузить его через readRTFDFromFile:. Путь к файлу указан правильно в NSLog, но он все равно не загружается :( - person Pripyat; 16.02.2010
comment
@ Дэвид, в другом тесте конечный / в порядке, но не file://localhost/. - person Carl Norum; 16.02.2010
comment
@ Дэвид, это все еще URL. Измените его на @"/Users/David/Documents/Coursework/Geography Coursework.rtfd". Как вы получаете URL? - person Carl Norum; 16.02.2010
comment
все еще ничего ... снова заголовок окна обновляется, но документ остается пустым. URL-адрес получается через вызов [NSDocument fileURL], который возвращает NSURL. - person Pripyat; 16.02.2010
comment
@ Дэвид, проверено и работает. Я отредактирую ответ. Я думаю, вы должны прочитать некоторую документацию. - person Carl Norum; 16.02.2010
comment
я знаю, что это не так, но я уже пробовал это (теперь он возвращает /ReadMe.rtfd). Безрезультатно. Тот же результат? Заголовок меняется, а NSTextView - нет. Мне серьезно интересно, почему это терпит неудачу :/ - person Pripyat; 16.02.2010
comment
Я думаю, что мой подход неверен? потому что реализация: -(BOOL)readFromFileWrapper:(NSFileWrapper *)fileWrapper ofType:(NSString *)typeName error:(NSError **)outError Может быть, мне нужно подойти к этому по-другому? - person Pripyat; 16.02.2010
comment
Зачем вам переопределять readFromFileWrapper:, если в этом нет необходимости? Я сдаюсь. - person Carl Norum; 16.02.2010
comment
Компилятор говорит мне, что readFromFileWrapper:ofType:error должен быть реализован и перезаписан для обработки файловых пакетов. - person Pripyat; 16.02.2010
comment
Чтобы получить строку пути из NSURL, используйте [yourURL path], а не [yourURL absoluteString]. - person Rob Keniger; 17.02.2010
comment
Проблема решена, я открыл не то дерево. Это ответ для NSDocument: mString = [[NSAttributedString alloc] initWithRTFDFileWrapper:fileWrapper documentAttributes:nil]; - person Pripyat; 17.02.2010

Я попробовал ваш фрагмент и добился следующего:

Окно NSDocument было открыто, заголовок был обновлен до имени файла RTFD, но NSTextView по-прежнему пуст.

Я был почти уверен, что мой код откроет его, так как я получил URL-адрес из экземпляра NSDocument, преобразовал его в NSString и отправил в текстовое представление...

if ([typeName isEqualToString:@"Rich Text with Attachments"]) {
        NSString *urlString = [[self fileURL] absoluteString];
        NSLog(@"%@",urlString);
        [textView readRTFDFromFile:urlString];

        return YES;
    }

Журнал вернул это:

file://localhost/Users/David/Documents/Coursework/Geography%20Coursework.rtfd/

Так должно работать?

person Pripyat    schedule 16.02.2010
comment
@ Дэвид, немного странно так отвечать на свой вопрос; пожалуйста, отредактируйте свой исходный пост, чтобы добавить больше деталей, если хотите. - person Carl Norum; 16.02.2010
comment
NSString *urlString = [[self fileURL] путь]; - person geowar; 28.07.2010