【发布时间】:2012-09-10 13:14:03
【问题描述】:
我正在构建一个应用程序原型,其中持久存储通过 AFP 在“服务器”机器(同一个 LAN)上使用 SQLite。 但是,我无法从我的应用的 2 个不同实例连接到商店。
我在持久存储协调器上设置 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 上持有主机独占锁;此主机 UID... 无法覆盖主机独占锁,直到另一个主机 UID... 释放其对 .../.TestDBApp.storedata-conch 的锁
我做错了吗?
是否可以使用 Core Data 和 SQLite 从 2 个客户端访问同一个存储?
这是 Core Data 和/或 SQLite API 中的错误吗?
【问题讨论】:
-
你有没有找到从 2 个不同进程访问 sqlite 的方法?如果一个连接有独占锁,我猜第二个连接不会等到它被提交,你必须实现你的重试逻辑。
标签: core-data sqlite nspersistentstore