我正在构建一个项目,我需要使用现有数据预填充 coredata 数据库。
我构建了一个解析器来在 iOS 模拟器中创建 sqlite 文件,一切正常。我正在使用单个实体,并且其中一个属性已编入索引。将我的数据文件解析为核心数据后的性能非常好,一切都很好。
现在我在具有相同数据模型、相同索引等的项目中使用生成的 sqlite 文件(~200Mb)......并且在第一次启动时,我复制了 db 文件以预填充数据
NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"myproject" ofType:@"sqlite"];
NSString *storePath = [[[self applicationDocumentsDirectory] path] stringByAppendingPathComponent: @"myproject.sqlite"];
NSError *error;
if (![[NSFileManager defaultManager] fileExistsAtPath:storePath])
{
if ([[NSFileManager defaultManager] copyItemAtPath:defaultStorePath toPath:storePath error:&error])
NSLog(@"Copied starting data to %@", storePath);
else
NSLog(@"Error copying default DB to %@ (%@)", storePath, error);
}
复制工作正常,可以正常访问数据。但是性能很糟糕,并且索引显然没有被使用。
看看复制操作后 sqlite 文件的大小,它从 200Mb 变成了 120Mb。
模型中的一切看起来都很好,需要索引的内容被检查为已索引。
1)有没有办法在复制sqlite时不删除索引数据?
2)是否可以以编程方式重建索引?
3)还有其他想法吗?