加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 如何在XCode 4中使用NSDocumentController的子类

发布时间:2020-12-16 06:03:10 所属栏目:百科 来源:网络整理
导读:我目前正在尝试教自己的 Cocoa开发.为此,我购买了一本非常优秀的书,适用于Mac OS X的可可食谱:佛蒙特食谱,它们通过创建示例应用程序.这是非常好的,但它是针对XCode 3.2,而不是XCode 4.到目前为止,我已经能够桥接这个自己,但我遇到了一个问题,我无法弄清楚如
我目前正在尝试教自己的 Cocoa开发.为此,我购买了一本非常优秀的书,适用于Mac OS X的可可食谱:佛蒙特食谱,它们通过创建示例应用程序.这是非常好的,但它是针对XCode 3.2,而不是XCode 4.到目前为止,我已经能够桥接这个自己,但我遇到了一个问题,我无法弄清楚如何遵循这个说明.

本书主要介绍了NSDocumentController子类化的示例,以便应用程序可以处理两种(最终可能是任意数量)不同类型的文档,因此它可以为每种类型打开适当的窗口.所以,我创建了一个NSDocumentController(本书调用VRDocumentController)的自定义子类,现在我需要使这样一个控制器的实例在应用程序启动过程中相对较早地加载.基本上,该类是一个单例,所以我必须在应用程序实例化标准类之前实例化我的,这必须在进程的早期完成.很公平.

该书引用了Apple documentation for subclassing NSDocumentController,其中指出有两种方法来攻击该问题:实例化MainMenu.xib文件中的类或在-applicationWillFinishLaunching:delegate方法中实例化一个类.苹果文档没有明确说明如何做这些(稍后再来),本书仅涵盖了第一个版本,我认为这可能是我的首选方法.

我的问题:我的生活不能在XCode 4中拉出来.本书为XCode 3.2提供的说明不再准确,因为Interface Builder现在已经被拖放到XCode本身,新版本的“类选项卡”不再显示我的项目课程.我发现this question on Stack Overflow提出了一个类似的问题,所以我尝试按照接受的答案.但是,当我打开身份检查器并尝试键入VRDocumentController时,它只会对我发出哔声,不接受.我写的其他控制器类都没有似乎也是可接受的输入.

我也很高兴走另一条路线;在-applicationWillFinishLaunching方法中实例化一个副本.但是,在这个方法实际上属于哪个类,或者它的返回类型是什么,我没有任何地道的想法.我也做了一个非常微小的数量的搜索,没有运气.

解决方法

在你的应用程序委托中:
// LukeAppDelegate.h
#import "LukeAppDelegate.h"
#import "VRDocumentController"

- (void)applicationWillFinishLaunching:(NSNotification *)notification {
    VRDocumentController *dc = [[VRDocumentController alloc] init];
}

这将确保创建一个VRDocumentController的实例并将其注册为共享文档控制器,从而防止Cocoa使用默认的NSDocumentController.

至于为什么您无法在nib文件中使用自定义对象,请确保在将新对象拖动到笔尖中时,选择对象(蓝色立方体)而不是对象控制器(绿色球体中的蓝色立方体)文件.

编辑:如果要定位支持恢复的OS X版本,则-applicationWillFinishLaunching:注册自定义文档控制器可能为时已晚.如果应用程序委托放置在MainMenu.xib中,那么在任何文档恢复之前,应该通过nib加载过程实例化,因此可以将NSDocumentController子类初始化移到应用程序委托的init方法中:

// LukeAppDelegate.h
#import "LukeAppDelegate.h"
#import "VRDocumentController"

- (id)init {
    self = [super init];
    VRDocumentController *dc = [[VRDocumentController alloc] init];
    return self;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读