【发布时间】:2011-04-01 19:46:05
【问题描述】:
当我的 sqlite 数据库使用核心数据模型创建时,在这一行:
if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])
我收到一个错误:
NSUnderlyingException=I/O SQLite error code:1, 'no such table: Z_METADATA'
知道如何解决这个问题吗?这几天我一直在努力。数据库已创建并复制到我设备上的文档目录中。
注意:
如果我在我的设备上删除、重建和安装应用程序 - .sqlite 文件的日期是两天前,而 .mom 文件的日期是昨天。如有必要,是否在编译时不重新创建数据库?我的项目中没有 .sqlite 文件,只有 .xcdatamodel。
感谢您的宝贵时间。
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator_ != nil) {
return persistentStoreCoordinator_;
}
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [documentPaths objectAtIndex:0];
//\MOVES DATABASE TO NEW LOCATION
NSString *storePath = [documentsDirectory stringByAppendingPathComponent:@"myShoeDatabase.sqlite"];
NSFileManager *fileManager = [NSFileManager defaultManager];
// If the expected store doesn’t exist, copy the default store.
if (![fileManager fileExistsAtPath:storePath]) {
NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"myShoeDatabase" ofType:@"sqlite"];
if (defaultStorePath) {
[fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
}
}
NSURL *storeURL = [NSURL fileURLWithPath:storePath];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
NSError *error = nil;
persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return persistentStoreCoordinator_;
}
enter code here
【问题讨论】:
-
您能否展示您创建 PSC 的代码 (
initWithManagedObjectModel:) -
SQLite 持久存储数据库是如何创建的?您不能只使用任何旧的 SQLite 数据库,它需要采用 Core Data 生成的确切格式。
-
我添加了我的代码。我正在使用由核心数据创建的数据库。感谢您对 Brad、falcon 和 MPelletier 的关注和帮助。
-
从命令行使用 sqlite> .schema 进行检查后,我只能看到:"CREATE TABLE "locations" ("id" INTEGER PRIMARY KEY NOT NULL ,"name" varchar(50), "lon" FLOAT,"lat" FLOAT);"
-
这看起来根本不像一个核心数据存储。您的 MOM 中有位置实体吗?
标签: iphone sqlite core-data metadata