2010-04-09 3 views
0

Я объявил объект NSMutableDictionary в AppController.h и инициализирован в соответствующем файле 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). Не беспокойтесь о (readonly) - это означает, что объект, получающий uberDict, не может установить его в новый словарь, но все же может изменять содержимое dict и читать из него.

+0

Это все еще не позволяет flashcardView «видеть» uberDict, правда, не так ли? Я реализовал это, и он по-прежнему возвращал ту же ошибку. По моему пониманию свойств они работают только в рамках класса и заменяют методы getter и setter, правильно? С точки зрения дизайна, есть ли лучший способ заставить объект NSView взаимодействовать с другими объектами? У меня только около недели знания Obj-c, и насколько я знаю, все NSView должны быть объявлены в их собственном файле, но я уверен, что это не единственный способ. – ilovetacos

+0

ну, конечно, вам нужно иметь какой-то способ добраться до AppController из NSView - я не указывал, потому что очень много и полностью зависит от вашего дизайна приложения, однако, как только у вас есть AppController в некотором роде, вы должен иметь возможность [[appController uberdict] allKeys] без проблем. Обычные способы заставить NSView знать о контроллере приложения - объявить IBOutlet в представлении и подключить его к контроллеру приложения в IB или (если AppController на самом деле является делегатом приложения) [делегат NSApp]. –

Смежные вопросы