【问题标题】:NSDocument read RTFD DataNSDocument 读取 RTFD 数据
【发布时间】:2010-02-15 18:24:50
【问题描述】:

我正在开发文本编辑器,我想添加 RTFD 支持。将 RTFD 文件类型添加到我的 Info.plist 后,我​​收到消息“readFromFileWrapper:ofType:error: must be overridden for your application to handle file packages.”

我浏览了文档并找到了一些东西,但我没有设法做所有事情..有人可以这么好心并帮助我吗?

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

感谢任何帮助:)

【问题讨论】:

    标签: cocoa rtf nsdocument


    【解决方案1】:

    幸运的是,RTFD 是一种特别简单的方法。查看NSTextreadRTFDFromFile:writeRTFDToFile:atomically: 方法。

    来自NSText Class Reference

    readRTFDFromFile:

    尝试读取 path 处的 RTFD 文件,如果成功则返回 YES,否则返回 NO

    - (BOOL)readRTFDFromFile:(NSString *)path

    讨论
    路径应该是.rtf文件或.rtfd文件包装器的路径,而不是.rtfd中的RTF文件的路径文件包装器。

    如果您来自NSURL,请执行以下操作:

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

    为安全起见,请先致电[[self url] isFileURL]

    【讨论】:

    • 我尝试了您的 sn-p 并实现了以下目标: NSDocument 窗口已打开,标题已更新为 RTFD 文件的名称,但 NSTextView 仍为空白。这是我的代码:if ([typeName isEqualToString:@"带有附件的富文本"]) { NSString *urlString = [[self fileURL] absoluteString]; NSLog(@"%@",urlString); [textView 读取RTFDFromFile:urlString];返回是; }
    • @David,您不需要 URL 字符串,只需要文件路径。我做了一个快速测试应用程序,这对我有用:[textView readRTFDFromFile:@"/Users/carl/Desktop/file.rtfd"]
    • 我有一个 URL 字符串的原因是因为我的应用程序基于 NSDocument 结构,NSDocument 仅返回一个 URL 作为文件路径,然后我将其转换为字符串...
    • 我这样做了: NSString *urlString = [[self fileURL] absoluteString];然后通过 readRTFDFromFile: 加载它。文件路径在 NSLog 上是正确的,但它仍然不会加载:(
    • 要从NSURL 获取路径字符串,请使用[yourURL path] 而不是[yourURL absoluteString]
    【解决方案2】:

    我尝试了你的 sn-p 并实现了以下目标:

    NSDocument 窗口已打开,标题已更新为 RTFD 文件的名称,但 NSTextView 仍为空白。

    我非常确信我的代码会打开它,因为我从 NSDocument 实例中获取了 URL,将其转换为 NSString 并将其发送到 textview...

    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/
    

    所以它应该工作?

    【讨论】:

    • @David,这样回答你自己的问题有点奇怪;如果您愿意,请编辑您的原始帖子以添加更多详细信息。
    • NSString *urlString = [[self fileURL] path];
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2010-12-16
    • 2010-11-18
    相关资源
    最近更新 更多