Странная одноэлементная инициализация в статической функции, инициализируемой во время модульных тестов - PullRequest
0 голосов
/ 22 февраля 2011

У меня есть следующий код в моем одноэлементном классе

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 часа ударился головой об этом: (.

Ответы [ 2 ]

1 голос
/ 22 февраля 2011

может быть лучше просто поместить код инициализации в метод общего экземпляра

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

также в своем коде вы сравниваете объект с классом, который никогда не будет истинным, вместо сравнения [self class] с [MySingleton class].

0 голосов
/ 22 февраля 2011

Установите точку останова в +initialize, чтобы убедиться, что эта переменная установлена ​​правильно.Если это не объясняет, используйте точку наблюдения , чтобы увидеть, кто ее модифицирует.

...