简体   繁体   中英

NSDocument read RTFD Data

I am working on a text editor and I want to add RTFD support. After adding the RTFD file type to my Info.plist, I got the message that "readFromFileWrapper:ofType:error: must be overridden for your application to handle file packages."

I had a look around in the documentation and found some things, but I didn't manage to do everything..Could someone be so kind and help me out please?

- (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; }

Any help is apprechiated :)

RTFD is a particularly easy one, luckily. Check out the readRTFDFromFile: and writeRTFDToFile:atomically: methods of NSText .

From the NSText Class Reference :

readRTFDFromFile:

Attempts to read the RTFD file at path , returning YES if successful and NO if not.

- (BOOL)readRTFDFromFile:(NSString *)path

Discussion
path should be the path for an .rtf file or an .rtfd file wrapper, not for the RTF file within an .rtfd file wrapper.

If you're coming from NSURL , do something like this:

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

To be safe, call [[self url] isFileURL] first.

I tried your snippet and achieved the following:

The NSDocument window was opened, the title was updated to the RTFD file's name but the NSTextView is still blank.

I was pretty convinced that my code would open it, since I got myself the URL from the NSDocument instance, converted it to an NSString and sent it to the textview...

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

        return YES;
    }

The Log returned this:

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

So it should work?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM