2010-04-09 64 views
0

我已經在AppController.h中聲明瞭一個NSMutableDictionary對象,並在相應的AppController.m文件中進行了初始化。跨類訪問NSMutableDictionary

AppController.h

#import <Cocoa/Cocoa.h> 


@interface AppController : NSObject { 

     NSMutableDictionary *uberDict; 

} 

AppController.m

#import "AppController.h" 


@implementation AppController 


- (id)init 
{ 
uberDict = [NSMutableDictionary new]; 

return self; 
} 

現在我想使用的NSMutableDictionary對象中另一種觀點認爲,flashcardView。我使用AppController類中的方法添加/刪除字典中的項目,並希望在flashcardView視圖中使用相同的字典(當前項目仍存在於其中)。問題是我不知道如何從AppController外部訪問字典對象。我會怎麼做?

從flashcardView.m

- (void)setAndCheckString 
{ 
NSArray *keys = [uberDict allKeys]; 
NSString *i; 
for (i in keys) { 
    string = i; 
    NSLog(@"%@", string); 
} 
} 

這裏的問題所在。我如何使用uberDict來完成這項工作?謝謝!

回答

0

雖然我鼓勵您查看其他設計模式,但是您只需要添加一個方法(或屬性)來訪問uberDict到AppController即可。作爲一個財產,代碼將是:

@interface AppController : NSObject { 
    NSMutableDictionary *uberDict; 
} 

@property (readonly) NSMutableArray *uberDict; 
@end 

在AppController.h文件,並只需添加一行@synthesize uberDict;在AppContoller實現中(在@end之前)。不要擔心(只讀) - 這意味着獲取uberDict的對象不能將其設置爲新的字典,但仍可以修改字典的內容並從中讀取。

+0

這仍然不允許flashcardView「看」uberDict,但是,是嗎?我實現了這一點,它仍然返回相同的錯誤。根據我對屬性的理解,它們只能在類的範圍內運行並替換getter和setter方法,對嗎? 從設計的角度來看,是否有更好的方式讓NSView對象與其他對象進行交互?我只有大約一週的Obj-c知識,並且據我所知,所有的NSView都必須在自己的文件中聲明,但我相信這不是唯一的方法。 – ilovetacos 2010-04-09 22:26:58

+0

當然,你需要有一些方法可以從NSView獲得AppController - 我沒有指定,因爲有很多並完全依賴於你的應用程序設計,但是一旦你有一個AppController以某種方式,你應該可以[[appController uberdict] allKeys]沒有問題。讓NSView瞭解應用程序控制器的常用方法是在視圖上聲明一個IBOutlet,並將它連接到IB的應用程序控制器,或者(如果AppController實際上是應用程序委託)[NSApp委託]。 – 2010-04-10 15:25:18