2016-04-06 4 views
4
+(Service *) sharedInstance 
{ 
    static LocationService *instance = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{    <<<< Crash 
     instance = [[self alloc]init]; 
    }); 
    return instance; 
} 

私は自分のアプリケーションにサービスのシングルトンインスタンスを作成するために、上記のコードを使用しています。これは「AppDelegateアプリケーション:willFinishLaunchingWithOptions:」から呼び出される。dispatch_onceでクラッシュ(&onceToken、^ {

ほとんどの場合しかし、2人のユーザーの場合、 "dispatch_once(& onceToken、^ {"行。

のアプリを削除して再インストールしましたが、引き続き問題が表示されます。これらの2人のユーザーのみがこの問題に直面している。その他は、それを見たことがありません。私は、さらにデバッグを行うには.dsym、.crashおよびその他の関連ファイルを持っている。チュ私はそれをどのように進めるべきかを知りたがっていますか?誰かが同様の問題を見た場合、どのように彼らはそれを修正すると進んだのですか?

+0

http://stackoverflow.com/questions/13626513/dispatch-once-call-causes-crash – StefanS

+0

http://stackoverflow.com/questions/7570528/ios-singleton-class-crashes-my- app – StefanS

+0

static = LocationService *インスタンス宣言から '= nil'定義を削除してみてください。 staticと宣言された変数は、デフォルトで0に初期化されていると思います。 – DDP

答えて

0

自己を使用しないでください。自己はクラスの初期化の前に利用できないためです。代わりに、次のようにクラス名を使用できます。

+(Service *) sharedInstance 
{ 
static LocationService *instance = nil; 
static dispatch_once_t onceToken; 
dispatch_once(&onceToken, ^{    
    instance = [[Service alloc]init]; 
}); 
return instance; 
} 
+2

これは間違っています。クラスメソッドでは、 'self'はクラスを指します。 –

+0

あなたの答えは@andeyありがとう –

関連する問題