2010-04-09 4 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; 
} 

는 지금은 다른보기, flashcardView에 NSMutableDictionary 개체를 사용하려고합니다. 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에 액세스하기위한 메소드 또는 속성을 추가하기 만하면됩니다. AppController.h 파일

@interface AppController : NSObject { 
    NSMutableDictionary *uberDict; 
} 

@property (readonly) NSMutableArray *uberDict; 
@end 

, 단지 하나 개의 라인 @synthesize의 uberDict를 추가; 속성으로, 코드는 것 @end 앞의 AppContoller 구현 내부. (readonly)에 대해 걱정할 필요가 없습니다. 즉, uberDict를 가져 오는 객체는 새로운 사전으로 설정할 수 없지만 dict의 내용을 수정하고 읽을 수는 있습니다.

+0

여전히 flashcardView에서 uberDict를 "볼"수 없습니다. 그렇습니까? 이것을 구현했지만 여전히 같은 오류를 반환했습니다. 속성에 대한 나의 이해에서 그들은 클래스의 범위 내에서만 기능하고 getter 및 setter 메서드를 바꿉니다. 디자인 관점에서 NSView 객체를 다른 객체와 상호 작용할 수있는 더 좋은 방법이 있습니까? Obj-c에 대한 1 주일 정도의 지식 만 가지고 있으며 모든 NSView를 자신의 파일에 선언해야한다는 것을 알고 있지만 이것이 유일한 방법은 될 수 없다고 확신합니다. – ilovetacos

+0

물론 NSView에서 AppController에 접근 할 방법이 필요하다. - AppController가 어떤 식 으로든 갖춰지면 애플리케이션 디자인에 많은 요소와 전적으로 의존하기 때문에 어떤 것을 지정하지 않았다. 문제없이 [[appController uberdict] allKeys] 할 수 있어야합니다. NSView가 앱 컨트롤러에 대해 알게하는 일반적인 방법은 뷰에 IBOutlet을 선언하고이를 IB의 앱 컨트롤러에 연결하거나 (AppController가 실제로 애플리케이션 위임자 인 경우) [NSApp delegate]입니다. –