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

Bu çağrılır ": willFinishLaunchingWithOptions: AppDelegate uygulama" Çoğu içinÇarpışma dispatch_once de (& onceToken,^{Benim uygulamada hizmet tekil örneğini oluşturmak için yukarıda gösterilen kodu kullanıyorum

. Kullanıcıların, bu kod iyi çalışıyor. Ama 2 kullanıcı için, uygulama "dispatch_once (& onceToken,^{" satırı.

Uygulamada çöktü ve uygulamayı yeniden yükledi. Ancak yine de sorunu görüyorlar. Sadece bu 2 kullanıcı bu sorunla karşı karşıya: Diğerleri hiç görmedim. Daha fazla hata ayıklama yapmak için .dsym, .crash ve diğer ilgili dosyaları var. st, onunla nasıl devam etmem gerektiğini bilmek istedi? Birisi benzer bir sorunla karşılaştıysa, onu nasıl düzeltmeye devam ettiler?

+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

'= nil' tanımını statik LocationService * örnek bildiriminden kaldırmayı deneyin. Statik olarak bildirilen değişkenlerin varsayılan olarak 0 olarak başlatıldığını düşünüyorum. – DDP

cevap

0

Kendini kullanma. Çünkü kendini sınıfın başlatılmasından önce mevcut değildir. Bunun yerine, sınıf adını aşağıdaki gibi kullanabilirsiniz.

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

Bu yanlış. Bir sınıf yönteminde, “self”, sınıfa karşılık gelir. –

+0

Cevabınız için teşekkürler @andey –

İlgili konular