0

我的单例类中有以下代码

static MySingleton *gManager;
+(void)initialize
{
   if(self == [MySingleton class])
   {
       gManager = [[MySingleton alloc] initWithServices:[[MyServices alloc] init]];
   }
}
+(MySingleton *)sharedInstance
{
   return (gManager);
}

不幸的是,在单元测试期间,我看到 gManager 是 SenTestCaseRun 类型的实例。我似乎无法弄清楚为什么?所以像 [[MySingleton sharedInstance] myFunction]; 这样的调用

导致 myFunction 是未知选择器的错误,尽管它存在于 MySingleton 类中。

它是 SenTestCaseRun 类型,因为我使用 NSStringFromClass 函数进行了检查。

任何指针?已经在这上面敲了我 3-4 个小时的头:(。

4

2 回答 2

1

将初始化代码放在共享实例方法中可能会更好

+(MySingleton *)shared
{
    static MySingleton *sharedInstance = nil;
    if(sharedInstance == nil){
        sharedInstance = [[MySingleton alloc] init];
    }
    return sharedInstance;
}

同样在您的代码中,您将一个对象与一个永远不会为真的类进行比较,而不是将 [self class] 与 [MySingleton class] 进行比较。

于 2011-02-22T19:37:19.247 回答
0

放置一个断点+initialize以确保正确设置此变量。如果这不能解释它,请在其上使用观察点来查看谁在修改它。

于 2011-02-22T19:53:45.967 回答