1

したがって、すべてのビューがアクセスでき、バックエンドのオブジェクトがアクセスできるバックエンド インスタンスを持つ NSDocument が必要です。現時点では共有インスタンスがありますが、これによりドキュメントが 1 つに制限されます。コードは次のようになります。

static id sharedInstance = nil;

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

しかし、これは私が望むようには機能しません。では、1 つの NSDocument にすべてのビューがアクセスできる 1 つの変数を持たせるにはどうすればよいでしょうか。私は小さなグラフを作りました: 素晴らしいグラフ

バックエンド オブジェクト内のオブジェクトは、「初期化」中にバックエンド オブジェクトにアクセスできる必要があることも重要です。

ありがとう

4

1 に答える 1

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];
于 2012-05-29T14:57:06.937 に答える