- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在 Objective C 中使用 FMDatabase SQLite 包装器,但遇到以下问题:
我在后台线程中为用户无权访问的某些内容运行 XML 解析和数据库插入,但是用户能够从他们所在的部分与 UI 和数据库进行交互。
The FMDatabase <FMDatabase: 0x17b7b0> is currently in use.
随机地,我会收到“FMDatabase already in use”的通知,并且数组永远不会被数据库填充。我的印象是 FMDatabase 类一旦空闲就会处理查询,但我有一个:
while(contents.count < 1){
sleep(1);
}
希望一旦数据库释放,数组就会被填充。如果数据库繁忙但无济于事,我也尝试重新运行数组填充脚本。
如果这个问题令人困惑,我很抱歉,我很乐意澄清。
最佳答案
我遇到了同样的问题。
我为必须执行的每个数据库查询/更新切换到 FMDatabaseQueue
。它就像一个魅力!
使用 performSelectorOnMainThread
是个好主意,但在实际编码时,传递参数和获取结果以供进一步使用可能会非常棘手。
编辑:这是一个小例子
-(void) updateTaskStateAsync:(NSNumber *)taskID withNewStatus:(NSNumber *)state andCompletionBlock:(void(^)(BOOL status))completionBlock{
NSString *errInfo = [NSString stringWithFormat:@"taskID %d - state %d", [taskID intValue], [state intValue]];
[queue inDatabase:^(FMDatabase *db) {
BOOL r = [db executeUpdate:@"UPDATE tasks SET state=?, date_job_last_updated=? WHERE identifier=?", state, [NSDate dateWithTimeIntervalSinceNow:0], taskID];
DB_DISPLAY_ERROR(errInfo); // convenient macro to log errors
if(completionBlock)
completionBlock(r);
}];
}
-(BOOL) updateTaskStateSync:(NSNumber *)taskID withNewStatus:(NSNumber *)state {
NSString *errInfo = [NSString stringWithFormat:@"taskID %d - state %d", [taskID intValue], [state intValue]];
__block BOOL r = NO;
__block BOOL ended = NO;
[queue inDatabase:^(FMDatabase *db) {
r = [db executeUpdate:@"UPDATE tasks SET state=?, date_job_last_updated=? WHERE identifier=?", state, [NSDate dateWithTimeIntervalSinceNow:0], taskID];
DB_DISPLAY_ERROR(errInfo); // convenient macro to log errors
ended = YES;
}];
NSCondition *cond = [[NSCondition alloc] init];
[cond lock];
while(!ended)
[cond wait];
[cond unlock];
return r;
}
关于objective-c - 带有 FMDatabase 包装器的 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5775269/
我收到此错误“FMDatabase 未打开”。即使我在执行查询之前先打开数据库。这是我用来打开数据库的数据库实例的代码。 var instance = ModelManager() class Mod
正在从我的移动应用程序中的服务预加载数据。 这里我在 NSOperationQueue 中添加了大约 7 个服务,所有这些操作结果都会更新数据库。 更新数据库时,日志中出现警告,如“FMDatabas
我的应用程序从 fm 数据库读取一些数据,并使用核心绘图库以图形方式显示它。我的应用程序第一次读取数据库时一切都很好,但问题是在将新数据插入数据库后,我执行了 sql select 语句,但它不读取插
我正在使用 Salesforce Mobile SDK 开发 iOS 混合应用程序。我正在使用 SmartStore 来保存 sObject 信息。虽然我面临一些问题。第一次打开应用程序并登录时,我在
我正在使用 FMDatabase 作为我的 iOS 应用程序的 sqlite 包装器,有一个地方我必须提取日期。我这样走: .... ac.date=[s dateForColumn:@"date"]
我有一个同步方法用于我正在构建的应用程序,使用 FMDatabase 包装器在本地 SQLite 中存储数据。当我将所有查询放在一个类中时,一切正常。但是,为了保持复杂性,我为部分同步添加了一些数据
我有以下行,当它运行时在 FMDB 上崩溃: -[FMDatabase executeUpdate:error:withArgumentsinArray:orDictionary:orVAList:]
我有一个应用程序使用 FMDatabase 插入用户收集的数据和一些从网络下载的数据。由于对数据库的同时请求过多,我目前遇到了一些崩溃问题。 我想通过我的应用程序并将 FMDatabaseQueue
我是 iOs 开发的新手,我正在尝试关注 this tutorial 一切似乎都正常,但是当我创建 ModelManager 类时,代码无法构建并出现以下错误 class ModelManager{
我正在尝试通过 Swift 类向 FMDB 发送请求。 这是有效的: self.database.executeQuery("SELECT * FROM foods WHERE id = ?", wi
刚刚偶然发现外键在 sqlite 中默认是禁用的。我有“删除级联”外键并且删除父表记录不会删除子记录。各种帖子表明您需要在每个连接上启用它“PRAGMA foreign_keys = ON;”。那么,
尽管我很少遇到 FMDatabase 问题,但今天我注意到一些奇怪的行为,并想知道这是一个错误还是由于我自己的错误。 NSString *query = [NSString stringWithFor
下面的代码没有给出任何错误,但没有执行插入操作,我不明白为什么。我还是个新手,想知道查看此查询结果或查看是否有错误消息的最佳方法。我确定它很简单,例如“BOOL success = [database
我正在使用 fmdb 库。 https://github.com/ccgus/fmdb 我想插入新记录,但我不知道该怎么做: if let db = database, let q = db.exec
您好,我正在尝试将 FMDatabase 保存到 iCloud。我只能保存 NSData 或 UIDocument 我该怎么办?有办法这样做吗?如果是这样,请告诉我任何意见将不胜感激。 最佳答案 默认
我目前在我的 iOS 应用程序中使用 FMDatabase,我对它非常满意。我打算用 SQLCipher 加密 sqlite 数据库。 这是我的问题: 1) FMDatabase 和 SQLCiphe
我在尝试使用 FMDatabase 时遇到了问题。 我添加了这些文件: FMDatabaseQueue FMDatabaseAdditions FMDatabase FMResultSet FMDat
我正在使用SQLite开发iPhone应用程序。我决定使用fmdb。使用fmdb,如何执行以下操作:-插入,更新,选择,删除? 由于无法使用FMDatabase开发应用程序。我下载了FMDatabas
我想使用 FMDB 在我的应用程序中创建 3 个或更多不同的单例来处理不同的商店场景,一个单例的例子是这样的: .h @interface MyManager : NSObject + (id)sha
问题: - 我正在使用 FMDatabase 类将数据存储在数据库中并从数据库访问数据。在一张表中,我使用 Blob 数据类型来存储图像。方式: UIImage *img = [UIImag
我是一名优秀的程序员,十分优秀!