Core data 将核心数据持久存储(SQLite)设置为正常锁定模式

Core data 将核心数据持久存储(SQLite)设置为正常锁定模式,core-data,sqlite,nspersistentstore,Core Data,Sqlite,Nspersistentstore,我正在构建一个应用程序原型,其中persistent store通过AFP在同一局域网的服务器机器上使用SQLite。 但是,我无法从我的应用程序的两个不同实例连接到商店 我设置了与锁定持久存储协调器相关的SQLite pragma设置,如下所示: NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom]; NSMut

我正在构建一个应用程序原型,其中persistent store通过AFP在同一局域网的服务器机器上使用SQLite。 但是,我无法从我的应用程序的两个不同实例连接到商店

我设置了与锁定持久存储协调器相关的SQLite pragma设置,如下所示:

    NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];

NSMutableDictionary *pragmaOptions = [NSMutableDictionary dictionary];
[pragmaOptions setObject:@"NORMAL" forKey:@"locking_mode"];
NSDictionary *storeOptions = [NSDictionary dictionaryWithObject:pragmaOptions forKey:NSSQLitePragmasOption];

if (![coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:storeOptions error:&error]) {
    [[NSApplication sharedApplication] presentError:error];
    return nil;
}
当尝试从第二个客户端连接到商店时,即当第一个客户端已成功连接时,收到的错误消息是:

错误:sqlite数据库被锁定,因为另一台主机正在使用它,该主机在…/TestDBApp.storedata上持有主机独占锁;此主机ID。。。无法重写主机独占锁,直到另一个主机UID。。。释放其在…/.TestDBApp.storedata-conch上的锁

我做错什么了吗

是否可以使用核心数据和SQLite从2个客户端访问同一存储


这是核心数据和/或SQLite API中的错误吗?

SQLite不允许数据库文件具有多个写锁。写入锁用于任何更改数据的事务,或者当应用程序显式请求时


显然,核心数据连接保持写事务或写锁打开

据我所知,核心数据将使用独占锁模式保存方法。我建议您将参数-com.apple.CoreData.SQLDebug 1传递给您的应用程序。如果您在控制台中发现BEGIN独占,我想您的设置会被核心数据忽略。

您是否找到从两个不同进程访问sqlite的方法?如果一个连接有一个排他锁,我想第二个连接不会等到它被提交,你必须实现你的won重试逻辑。