2011-05-07 97 views
2

在我的ios應用程序中,我使用FMDB連接到sqlite3數據庫。 在應用中,數據庫將在multithread.As使用的結果,我以這種方式創建一個單例:FMDB與多線程問題

+ (id)instance 
{ 
static DBManager *dbManager = nil; 
if (dbManager == nil) { 
    dbManager = [[DBManager alloc]init]; 
} 

[dbManager initialDBmanager]; 
return dbManager; 
} 

但是錯誤:FMDataBase正在使用,有時occures。 然後我更新實例:

+ (id)instance 
{ 
static DBManager *dbManager = nil; 
if (dbManager == nil) { 
    dbManager = [[DBManager alloc]init]; 
      [dbManager initialDBmanager]; 
} 

while([dbManager.db inUse])//In my opinion this promises the db is free 
    { 
    } 
return dbManager; 
} 

錯誤仍然存​​在。 所以我的問題是如何正確地創建一個單身人士,爲什麼代碼無法避免的錯誤。 謝謝!

回答

1

我使用@synchronized,它暫時解決了這個問題。

我會繼續關注它的〜

+1

你在哪裏用過@synthesized? – Minakshi 2014-05-07 06:34:10

+0

現在我爲db的每個寫操作添加一個'nslock'。 '合成的'是一種懶惰的方式〜:-) – scorpiozj 2014-05-08 09:05:51