2012-05-29 89 views
1

所以我需要一個NSDocument與後端實例,所有視圖可以訪問和後端對象可以訪問。目前我有一個共享實例,但是這限制了文檔只有一個。代碼就像這樣:NSDocument廣泛變量

static id sharedInstance = nil; 

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

但是,這不符合我想要的方式。那麼我怎樣才能實現這一個NSDocument有一個變量每個視圖可以訪問,我怎樣才能讓後端的每個對象能夠訪問後端?我做了一個小圖: an awesome graph

重要的也是在後端對象中的對象需要訪問到後端對象,而他們「初始化」

感謝

回答

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