Как привязать элемент управления к синглтону в Какао? - PullRequest
3 голосов
/ 23 мая 2010

В моем приложении FTP есть одноэлементное хранилище, предназначенное для хранения всех типов серверов, которые может обрабатывать приложение, таких как FTP или Amazon S3. Эти типы являются плагинами, которые находятся в комплекте приложений. Их путь находится в applicationWillFinishLoading: и отправляется в метод addServerType: внутри синглтона, который нужно загрузить и сохранить в NSMutableDictionary.

Мой вопрос такой:
Как мне связать NSDictionaryController со словарем внутри экземпляра синглтона? Это может быть сделано в IB, или я должен сделать это в коде? Мне нужно иметь возможность отображать ключи словаря в NSPopupButton, чтобы пользователь мог выбрать тип сервера.

Заранее спасибо!
SphereCat1

1 Ответ

2 голосов
/ 27 мая 2010

Я нашел / составил ответ на этот вопрос: я просто переопределяю метод init, чтобы при вызове из файла XIB он по-прежнему возвращал синглтон. Затем я предоставляю метод realInit для реальной инициализации при первом вызове init.

Код:

-(id)init
{
    @synchronized(self)
    {
        if (_sharedInstance == nil)
        {
            _sharedInstance = [[VayprServerTypes alloc] realInit];
        }
    }
    [self release];

    return _sharedInstance;
}

-(id)realInit
{
    if (self = [super init])
    {
        serverTypesArray = [[NSMutableArray alloc] init];
    }

    return self;
}

РЕДАКТИРОВАТЬ: Конечно, вам нужно определить _sharedInstance как статическую переменную в верхней части реализации вашего класса:

static ClassTypeGoesHere *_sharedInstance;

ТАКЖЕ РЕДАКТИРОВАТЬ: поскольку теперь вы точно знаете, что ваш метод init будет вызван хотя бы один раз, вы можете заменить свой обычный одноэлементный метод sharedInstance следующим:

+(ClassTypeGoesHere *)sharedInstance
{
    return _sharedInstance;
}

Если кто-нибудь видит какие-либо очевидные проблемы с этим дизайном, пожалуйста, дайте мне знать! SphereCat1

...