2

我想用一个小的 sqlite3 DB 初始化我的应用程序。我试图将它放在 Documents 目录中,但有时它以零大小复制它,有时它根本不复制它。

我应该如何使用充满信息的数据库初始化我的应用程序?

谢谢

4

2 回答 2

4

您如何将其复制到您的应用程序中?
如果您将应用程序与应用程序包中的 DB(作为资源)一起发布,您应该将其从资源中复制到文档文件夹(如果它不存在)并在那里使用它:

NSFileManager *fileManager = [[NSFileManager defaultManager] autorelease];
BOOL exists = [fileManager fileExistsAtPath:databasePath];

if (exists) {
    return;
}

NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
于 2010-01-26T11:18:24.837 回答
1

谢谢弗拉基米尔,

这很有帮助。我做了一些更改,这是效果很好的最终结果:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *databasePath = @"personalLMS.s3db";

NSFileManager *fileManager = [[NSFileManager defaultManager] autorelease];

NSString * databasePathFromApp = [[NSBundle mainBundle] pathForResource:@"personalLMS"  ofType:@"s3db"];

[fileManager copyItemAtPath:databasePathFromApp toPath:[documentsDirectory stringByAppendingPathComponent:databasePath] error:nil];
于 2010-01-26T14:32:08.453 回答