0

シングルトンクラスに次のコードがあります

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

残念ながら、単体テスト中に、gManagerはSenTestCaseRunタイプのインスタンスであることがわかりました。理由がわからないようですが?したがって、[[MySingletonsharedInstance]myFunction]のような呼び出し;

mySingletonクラスに存在するにもかかわらず、myFunctionが不明なセレクターであるというエラーが発生します。

NSStringFromClass関数を使用してチェックしたため、SenTestCaseRunタイプです。

ポインタはありますか?すでにこれで3-4時間頭を叩いた:(。

4

2 に答える 2

1

共有インスタンスメソッド内に初期化コードを配置する方がよい場合があります

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

また、コードでは、[self class]を[MySingletonclass]と比較する代わりに、オブジェクトを決して真にならないクラスと比較しています。

于 2011-02-22T19:37:19.247 に答える
0

+initializeこの変数が正しく設定されていることを確認するためにブレークポイントを設定します。それでも説明がつかない場合は、ウォッチポイントを使用して、誰が変更しているかを確認してください。

于 2011-02-22T19:53:45.967 に答える