2011-05-07 99 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