NSDocument广泛变量

时间:2012-05-29 14:50:48

标签: cocoa backend nsdocument

所以我需要一个带有后端实例的NSDocument,所有视图都可以访问,并且后端中的对象可以访问。目前我有一个共享实例,但这将文档限制为只有一个。代码就像这样:

static id sharedInstance = nil;

+(void)initialize {
    if (self == [ApricumBackend class]) {
        sharedInstance = [[self alloc] init];       
    }
}
+ (id)mainBackend {
    return sharedInstance;
}

但这并不是我想要的方式。那么我怎样才能实现一个NSDocument每个视图都可以访问一个变量,如何让后端的每个对象都能访问后端?我做了一个小图: an awesome graph

重要的是,后端对象中的对象需要能够访问后端对象,而不是" init"

由于

1 个答案:

答案 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];