我可以访问应用程序范围内的委托实例使用[NSApp delegate]添加后NSObject的mainmenu.xib,对象的名字为我的appDelegate的名称和mainmenu.xib设置委托给该对象.
现在,我想做的是访问对象的Document,即NSDocument对象"所属" 的活动对象.我想这将是一个文档范围的委托实例.有时[self document]工作,但并非总是如此.有通用的方法吗?
最近,每当我启动我的应用程序时,保存的文档都会导致崩溃。有没有一种方法可以防止基于文档的应用程序打开任何文档,包括新的空白文档或最新的活动文档?我不希望通过使用OSX功能(不在我的应用程序范围内)而是在程序中进行此操作。
我认为应该通过NSDocumentController某种方式完成此操作,但是我无法弄清楚,也没有运气在其他地方找到答案。
因此,如何告诉OSX应用程序(通过NSDocumentController)在启动时不要打开任何文档?
我正在使用Xcode在Swift for OS X中构建一个基于文档的新应用程序.我希望默认的Document类被称为不是Document的东西(在本例中是Notebook),当然它仍然是子类NSDocument(如果我使用Core Data,则为NSPersistentDocument).我可以将其文件从Document.swift重命名为Notebook.swift,但是一旦我将实际的类从Document重命名为Notebook,运行该应用程序会弹出错误警告"无法创建文档".控制台告诉我"DocumentType类型不映射到任何NSDocumentClass."
因此,显然我必须做其他事情才能使文档架构在重命名后识别我的类.但是什么?我在另一个网站上找到了一些指示,但是当我使用Swift和故事板时,它们已经过旧了,并为Objective-C和XIB编写; 我需要做的可能是完全不同的.使用故事板在Swift中重命名基于文档的应用程序的主文档类需要做什么?
编辑:下面有一个代码请求.基本上,默认的Document.swift或Notebook.swift文件看起来像
import Cocoa
class Document: NSDocument {
... [standard code for Document class goes here, edited out for brevity]
}
Run Code Online (Sandbox Code Playgroud)
然后我改成了
import Cocoa
class Notebook: NSDocument {
[...]
}
Run Code Online (Sandbox Code Playgroud)
它适用于顶部的版本,不适用于底部的版本.
我有一个基于文档的应用程序,旨在处理现有文档,而不是创建新文档.
如何通过从Finder中打开应用程序来阻止应用程序创建新的空白文档?
我有一个菜单项,其状态应取决于NSDocument打开的状态。据我了解,要动态改变其状态,我应该使用NSMenu委托方法menuNeedsUpdate:。
似乎我想让菜单的代表成为中的第一响应者MainMenu.xib。但是,Interface Builder不允许我将其设置为主菜单的代表。如何创建一个可以访问当前活动文档的委托?
停止按下确定在您看到retainCount以下问题中的单词之前,请跳到底部的编辑,我已经说过我已经停止使用它.
我的Cocoa App使用MRRmain(),在NSApplicationMain()调用之前创建了许多全局资源,我正在加载它.由于NSApplicationMain()没有返回,我已经使用atexit()这样的方式来清理这些资源的清理:
atexit(cleanup);
if (![CocoaUtil initCocoaUtil] ||
![PreferenceController initPreferenceController] ||
![ResourceManager initResourceManager])
{
criticalAlertPanel(@"Failed to initialize application",
@"Failed to initialize application");
return 4;
}
retval = NSApplicationMain(argc, (const char **)argv);
Run Code Online (Sandbox Code Playgroud)
然而cleanup(),在我的NSDocument子类中dealloc的任何视图都是'd(我缺少显示此消息的日志消息)之前调用它,因此有时候全局资源中的对象的引用计数> 1.我过于谨慎并试图通过使用此方法释放我的全局资源来预先防止内存泄漏:
+ (void)fullRelease:(id)obj
format:(NSString *)format, ...
{
if (obj == nil)
return;
NSUInteger retainCount = [obj retainCount];
if (retainCount > 1)
{
va_list va;
va_start(va, format); …Run Code Online (Sandbox Code Playgroud) 我有一个基于NSDocument的应用程序.我想知道应用程序什么时候退出以验证某些事情.我希望可能有一个方法,如applicationWillQuit,但查看NSDocument和NSApplication的文档,我找不到任何类似的东西.
我有一个NS(Persistent)Document.
我通过Xcode运行我的应用程序,然后创建一个新文档(没有任何数据),然后退出我的应用程序.在这种情况下,我可以检查init和windowControllerDidLoadNib:被调用
如果我使用Xcode重新运行我的应用程序,那么之前的文档将自动打开.但是,我可以检查既init不会也不会windowControllerDidLoadNib:被调用.
为什么会这样?
我有一个OSX应用程序,它使用NSDocument和autosaves inplace-一切正常.有时,用户会将文档保存到Dropbox同步文件夹中,然后有可能在应用程序中仍然打开文档时(通过Dropbox)更新文档.问题是,我如何检测这个并从磁盘重新加载文档(或至少通知用户.)
谢谢
我在Xcode 8中使用向导创建了一个NSDocuments和storyboard应用程序.在ViewController场景中,我添加了一个NSTextView.某些菜单项被禁用,例如Bold和Italic.
查看第一响应者,粗体和斜体的操作不存在.我应该自己写这些方法吗?这是由于响应者链没有正确设置吗?为什么下划线显示但不大胆?
编辑:添加图像以显示如何使用检查器栏编辑文本,但格式菜单不显示我期望的命令.
nsdocument ×10
cocoa ×8
macos ×6
swift ×2
xcode ×2
autosave ×1
delegates ×1
nsresponder ×1
nstextview ×1
objective-c ×1