Я объявил объект 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, чтобы сделать эту работу? Благодаря!
Это все еще не позволяет flashcardView «видеть» uberDict, правда, не так ли? Я реализовал это, и он по-прежнему возвращал ту же ошибку. По моему пониманию свойств они работают только в рамках класса и заменяют методы getter и setter, правильно? С точки зрения дизайна, есть ли лучший способ заставить объект NSView взаимодействовать с другими объектами? У меня только около недели знания Obj-c, и насколько я знаю, все NSView должны быть объявлены в их собственном файле, но я уверен, что это не единственный способ. – ilovetacos
ну, конечно, вам нужно иметь какой-то способ добраться до AppController из NSView - я не указывал, потому что очень много и полностью зависит от вашего дизайна приложения, однако, как только у вас есть AppController в некотором роде, вы должен иметь возможность [[appController uberdict] allKeys] без проблем. Обычные способы заставить NSView знать о контроллере приложения - объявить IBOutlet в представлении и подключить его к контроллеру приложения в IB или (если AppController на самом деле является делегатом приложения) [делегат NSApp]. –