我的FTP应用程序中有一个单例,用于存储应用程序可以处理的所有类型的服务器,例如FTP或Amazon S3。这些类型是位于应用程序包中的插件。它们的路径由applicationWillFinishLoading定位:并发送到单例内的addServerType:方法,以加载并存储在NSMutableDictionary中。
我的问题是:
如何将NSDictionaryController绑定到单例实例中的字典?它可以在IB中完成,还是必须在代码中完成?我需要能够在NSPopupButton中显示字典的键,以便用户可以选择服务器类型。
提前致谢!
SphereCat1
答案 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