问题标签 [nsdocument]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1024 浏览

cocoa - 除了自己的文件类型弹出按钮外,还向 NSDocument 的保存面板添加附件视图

我有一个NSDocument可以保存为多种文件类型的基于应用程序,因此在保存文档时,NSDocument 会在保存面板中添加一个弹出按钮作为其附件视图,让用户选择他们想要保存的类型。好的。

现在,我想在保存面板中包含另一个视图,但如果我只是覆盖-[NSDocument prepareSavePanel:]并用于-setAccessoryView:插入我自己的视图,它会替换文件类型弹出按钮,所以只有我的视图出现在保存面板而不是弹出按钮。

有什么方法NSDocument可以让我自己的视图及其文件类型弹出窗口同时出现在保存面板中?看起来我可以获取现有的附件视图,将其与我自己的附件一起修补到容器视图中,然后将其放回原处,但这似乎很不合时宜,我想知道是否有更好的方法来做到这一点错过了。

0 投票
2 回答
799 浏览

macos - 在 NSPersistentDocument 上启用核心数据的自动轻量级迁移

ALM 很棒。但是我不能让它在一个使用核心数据和 NSDocument 的项目上工作。似乎默认情况下禁用了 ALM。

美好的。对于任何正常的项目,您将在此行的字典中添加两个适当的选项:

...但是当将 CD 与 NSD 一起使用时,该行不存在(NSPersistentDocument 隐藏了详细信息,我看不到如何修改它们)。

以下方法似乎提供了希望:

...邮件列表中的一些人(从 4 年前开始)报告成功地覆盖了该方法,更改了选项字典,然后在“super”上重新调用它。可悲的是,这对我不起作用。如果您有类似的问题,我建议您先尝试一下 - 如果仍然无法正常工作,请回到这里 :)

0 投票
1 回答
209 浏览

objective-c - 如何在另一个 xib 中访问属于 MyDocument 的 NSArray 实例?

在我的文档应用程序中,我将我在 MyDocument.xib 中引用的 NSArrayController 子类化,将其内容绑定到File 的 Owner.entries

entries 是一个 NSArray,我以这种方式公开为 MyDocument 类的属性:

这工作得很好。好的。

现在我设计了另一个 .xib,CSVEntries.xib,我通过 NSMenuItem 通过 NSWindowController 打开它,并且再次运行顺利。

我不知道如何让这个新窗口在 NSTableView 中显示 MyDocument.entries 实例的内容。

我已经尝试了很多东西,但问题基本上是我放在 CSVEntries.xib 上的任何 NSArrayController 都不能绑定到 MyDocument.entries: CVSEntries.xib 文件的所有者指的是其他东西而不是 MyDocument(我猜这是合乎逻辑的)。

我还尝试将 NSArray 实例的副本添加到打开 CVSEntries.xib 的 NSWindowController 中,但是由于仅在用户单击菜单时才实例化窗口,因此我最终得到了一个空数组。

我在互联网上搜索但找不到合适的答案,我只是想找出解决问题的正确方法,我确信两个窗口可以相互通信,也许访问它们的共同父级(NSApplication 实例)?

所有新手问题,我知道:)

更新

我想我知道在哪里看,但仍然不知道如何看。我想我必须确保第二个窗口文件的所有者是 MyDocument 但在 NSWindowController initWithWindowNibName:owner: 我不明白如何将 MyDocument 实例指定为所有者。仅在 xib 文件 File's Owner 中指定它似乎还不够。

更新 2

嗯...我开始认为我需要有两个 NSWindowController 实例,它们都由我的 NSDocument 子类(默认为 MyDocument)实例化。有了这些,可能两个 NSWindowController 都可以访问 MyDocument.entries NSArray,并且两个 windows xib 文件将能够绑定到 File 的 Owner.entries。

有人可以证实这一点吗?谢谢。

0 投票
1 回答
2176 浏览

objective-c - NSWindowController 没有在初始化时隐藏它的窗口?

我有一个 NSDocument 子类,其中有两个 NSWindowController 对应于 2 个不同的 xib。

遵循基于文档的应用程序指南,我在 document.m 实现中添加了以下内容

问题是我希望第二个窗口控制器 csvWindowController 最初隐藏它的窗口,稍后我将显示相同的窗口实例。为此,我写了:

但是窗口在那里,出现了。

请不要我没有标记 VisibleAtLaunch,该控制台正在正确显示我的消息,即使我更改:

结果是一样的,窗口出现了。

任何帮助表示赞赏,谢谢:)

0 投票
1 回答
1032 浏览

objective-c - applicationShouldOpenUntitledFile 返回 NO,但应用仍会打开空白文档

我不清楚如何阻止基于文档的应用程序在启动时显示空文档。

在我发布的上一个问题中,有人说:“您确定窗口委托设置正确nil吗?”

有人可以详细说明吗?MyDocument nib 中的 Window 对象似乎默认连接到 File 的 Owner/Delegate。我还需要做什么?就目前而言,它不起作用。

此方法位于项目结构中的 MyDocument.m 中。我需要额外的代码吗?

0 投票
4 回答
1098 浏览

objective-c - 在多个 NSWindowController 之间共享 NSDocument 子类

我有一个当前不是基于文档的应用程序的应用程序(因为我认为它比它的价值更麻烦)。但是我一直认为现在可能值得,但有一个问题我还没有解决。NSDocument在多个窗口之间共享子类。

那么子类NSDocument是否必须绑定到单个NSWindowController,或者我可以在多个窗口之间共享这些?我问的原因是我的应用程序文件可能高达 100MiB(或更大),并且用户也可能会在多个窗口中打开同一个文件。此外,这些文件需要相对较长的时间来处理,因此允许多个窗口访问相同的文件NSDocument会非常好。此外,文件的更新速度非常快,包含大量数据,因此同步同一文档的多个实例会占用大量 CPU 时间。

有没有人这样做过,或者甚至可以使用基于文档的应用程序来完成?非常感谢有关此主题的任何建议。

0 投票
1 回答
222 浏览

cocoa - 在基于文档的应用程序中,文档是否必须代表文件?

我大约 90% 的把握我的程序会从使用 Cocoa 中的文档框架中受益,但有一件事我不确定。

在我看到的所有示例中, NSDocument 子类始终表示正在保存的文件,这并不完全适合我的应用程序。

将在我的应用程序中保存到磁盘的文件将是将在程序中编辑的实体的集合。创建新文件时,用户将能够编辑该集合中包含的各个实体,这将需要状态和更改跟踪(保存、撤消等)。

基于文档的应用程序会以这种方式工作,还是我会不断地与框架作斗争?

更新以使我的问题更清楚:

我计划将文件保存为一个包,因为它肯定会使管理文件中包含的单独实体变得更容易,但并没有真正解决我的问题。

想想像 Microsoft Access 这样的程序;文件是数据库,但文档表单、报告、查询和宏之类的东西。每个项目都在单独的文档窗口中进行编辑,并且可以保存或撤消对单个文档的更改,但保存的是整个数据库(包括所有表单、报告和查询)。

0 投票
3 回答
1385 浏览

cocoa - 打开时将所有 NSDocument 窗口置于最前面

在大多数系统中,“打开一个新窗口”的默认行为是它出现在前面。这在 Cocoa 中不会发生,我正在尝试找到“正确”的方法来实现这种标准行为。我尝试过的大多数事情最多只能用于一个窗口。

我需要在启动时打开多个窗口:

  • (N x NSDocuments(每个窗口一个)
  • 1 x 简单的 NSWindowController 打开一个 NIB 文件。

不起作用的事情:

  1. 遍历我要打开的所有 NSDocument,然后打开它们。

怎么了?...只有调用 open 的“最后一个”出现在前面 - 其余的都是隐藏的,不可见的,在屏幕上无处可见,直到您快速切换或使用“窗口”菜单找到它们。

代码:

  1. 在每个窗口打开后手动调用“makeKeyAndOrderFront”

怎么了?没什么不同。但是我能找到获取 NSWindow 实例的唯一方法是如此可怕,它似乎完全错误(但在几个博客和邮件列表帖子中都提到了)

代码:

...我知道我做错了,但我不知道为什么/做什么不同:(。

通常但并非总是有效的东西:

  1. 如上所述,但只使用“showWindow”代替(我从 NSDocument 指南中获取)。

奇怪的是,这有时会奏效......即使这是苹果声称他们在内部调用的确切代码。如果他们在内部调用它,如果我在他们已经这样做之后重新调用它,为什么它的行为会有所不同?

0 投票
2 回答
1088 浏览

cocoa - 在不同的类中调用 IBAction

我的基于文档的应用程序有一个带有表格视图的窗口。tableview 有一个指向 NSObject 类型的类(称为 HopBill)的数据源,其中包括 NSMutableArray (aHopBill) 和所需的 tableview 方法。到目前为止,一切都很好。

为了向 tableview 添加行,我添加了一个由 NSWindowController(称为 HopBillSheetController)控制的工作表。当按下工作表中的 OK 按钮时。我实际上需要做两个 IBActions(这是不可能的):将行添加到 tableview 的数组并关闭工作表。我可以将工作表中的 OK 按钮连接到 NSWindowController(关闭工作表)或将其连接到 NSObject(将行添加到数组中)。但我想要两个:-)

是否可以从 NSObject 调用 NSWindowController 中的 IBAction?还是有其他方法可以做到这一点?

我是 Cocoo 和 Objective-C 的初学者,所以请温柔:-)

0 投票
1 回答
226 浏览

cocoa - 针对小型 IDE 的 Cocoa 架构建议

我已经着手开发一个用于在 Mac OSX Snow Leopard 上进行微控制器编程的简单 Cocoa IDE 的个人项目。由于编程不是问题,因此我在选择架构来绘制应用程序的高级块时遇到了一些困难。我在想:

  1. 可以设置项目详细信息,类似于用户创建新项目时 XCode 所做的;可能包含可能存储在用户默认值或 plist 中的项目详细信息的附件视图。
  2. 可以将项目保存为自定义的特定文件类型,并具有应用程序将拥有的特定扩展名(基于文档的应用程序)。
  3. 可以将新文件添加到项目中,特别是将自动包含以进行编译的 h 文件头;选择新文件时,可以选择文件类型(类似于 XCode);
  4. 有一个简单的编辑器,基于文本视图,例如,没有语法着色、检查、突出显示;但是,以这样的方式设计它,以允许未来开发语法着色/检查,NSScanner例如,通过 ;
  5. 可以根据选择的任何持久性方法自动生成 Makefile 进行编译。
  6. stdout有可能通过或其他更好的方法 将编译器详细程度记录到日志视图(文本视图?)中;
  7. 使用NSOutlineView带有树控制器(例如)进行文件浏览(类似于左窗格中 XCode 的项目文件);
  8. 将项目打包到类似文件夹的项目文件中,NSFileWrapper例如(包括 main.c 文件、附加头文件、自动生成的 Makefile 和用于项目设置的 plist 等);
  9. NSUserDefaults通过应用程序共享的单例(例如) 将设置持久性用于项目设置和应用程序首选项;
  10. 使用模型组件中的一些类通过微码编译器连接NSTask,并在日志文本视图中显示编译和上传结果;
  11. ETC

如果你们中的任何人,比我有更多的经验,会开始这样一个项目,你会选择什么架构组件?相同(拆分视图、文本视图、NSTask文件包装器、带有树控制器的大纲视图、将应用程序委托与文档分开以及文档控制器的共享实例等),还是您会选择不同的方法?一个更简单的?

我将不胜感激任何可能的提示。感谢您抽出宝贵的时间。如果有人有兴趣,我会随时了解进展情况。