所以我需要一个带有后端实例的NSDocument,所有视图都可以访问,并且后端中的对象可以访问。目前我有一个共享实例,但这将文档限制为只有一个。代码就像这样:
static id sharedInstance = nil;
+(void)initialize {
if (self == [ApricumBackend class]) {
sharedInstance = [[self alloc] init];
}
}
+ (id)mainBackend {
return sharedInstance;
}
但这并不是我想要的方式。那么我怎样才能实现一个NSDocument每个视图都可以访问一个变量,如何让后端的每个对象都能访问后端?我做了一个小图:
重要的是,后端对象中的对象需要能够访问后端对象,而不是" init"
由于
答案 0 :(得分:1)
对于对象,您创建了一个包含指定初始值设定项的NSObject
的公共子类:
+ (id)initWithBackend:(Backend *)backend;
也许称之为BackendObject
。然后你的对象应该继承BackendObject
并添加适当的初始化方法,例如:
+ (id)initWithSomething:(Something *)something backend:(Backend *)backend;
然后,这些初始化方法可以调用超类初始化程序,后端对象(图表显示为拥有它们)在初始化时需要传递self
。
对于视图,您可以使用以下命令从NSView
子类初始化程序中访问该文档:
MyDocument *mydoc = [[[self window] windowController] document];
提供访问后端的访问器,后端可以作为实例变量保存:
Backend *backend = [mydoc backend];