如何将控件绑定到Cocoa中的单例?

时间:2010-05-23 12:32:42

标签: cocoa binding singleton nsdictionary cocoa-bindings

我的FTP应用程序中有一个单例,用于存储应用程序可以处理的所有类型的服务器,例如FTP或Amazon S3。这些类型是位于应用程序包中的插件。它们的路径由applicationWillFinishLoading定位:并发送到单例内的addServerType:方法,以加载并存储在NSMutableDictionary中。

我的问题是:
如何将NSDictionaryController绑定到单例实例中的字典?它可以在IB中完成,还是必须在代码中完成?我需要能够在NSPopupButton中显示字典的键,以便用户可以选择服务器类型。

提前致谢!
SphereCat1

1 个答案:

答案 0 :(得分:1)

我找到了/得到了答案:我只是覆盖了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方法,那么可以继续使用以下方法替换普通的singleton sharedInstance方法:

+(ClassTypeGoesHere *)sharedInstance
{
    return _sharedInstance;
}

如果有人发现此设计有任何明显问题,请告诉我们! SphereCat1