【问题标题】:File -> Duplicate crashing NSDocument-based app文件 -> 重复崩溃的基于 NSDocument 的应用程序
【发布时间】:2014-06-19 04:18:42
【问题描述】:

我正在编写一个基于文档的 OSX 应用程序。我最近发现使用 Duplicate 会使我的应用程序崩溃,调试器在本机程序集中停止。

我有一个覆盖这些的 NSDocument 子类:

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

我可以保存和打开,如果我将另存为添加到文件菜单中,我什至可以另存为。

如果我这样做……

- (NSDocument *)duplicateAndReturnError:(NSError **)outError
{
    return [[Document alloc] init];
}

…它不再崩溃,但 Duplicate 然后什么都不做,没有动画,没有新窗口,什么都没有。

抱歉,我知道这没什么好做的,但我不知道如何调试它。任何建议表示赞赏。

【问题讨论】:

  • 文档表明您需要做一些完全不同的事情。
  • 谢谢,这只是我需要的正确方向的推动。我改用 - (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError 问题就消失了。
  • 太棒了。很高兴听到这个消息。

标签: objective-c xcode macos cocoa


【解决方案1】:

虽然最初的发帖人已经明白了,但为了让以后阅读本文的人清楚:您应该实现 其中一个 read 三个方法和一个 匹配 write 方法。

例如,从以下三个选项中选择您要实现的一组方法:

// 有了这对你自己负责读写所有内容,你的磁盘格式可以是任何东西 open func read(from url: URL, ofType typeName: String) 抛出 open func write(to url: URL, ofType typeName: String) 抛出

// 使用这一对,您可以处理 FileWrapper,如果您的文件格式是捆绑包(带有扩展名的文件夹),这会使生活变得更轻松 打开 func 读取(来自 fileWrapper:FileWrapper,ofType typeName:String)抛出 打开 func fileWrapper(ofType typeName: String) throws -> FileWrapper

// 使用这对你只是在阅读写入单个平面二进制文件 打开函数读取(从数据:数据,ofType typeName:字符串)抛出 open func data(ofType typeName: String) throws -> 数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    相关资源
    最近更新 更多