我的模拟器运行良好且快速。我的 iphone 似乎在我尝试创建和填充数据库的部分冻结。但是我更喜欢使用模拟器中的数据库并将其放在 iphone 上,这样用户就不必重新创建数据库。我想知道的是如何从添加到文件夹的数据库中加载。
我搜索了很多,但要么它已经过时,要么与我想要的不同。我现在将数据库文件从 finder 添加到 xcode 项目中。因此,如果我是正确的,我必须更改 _databasePath 以指向文件所在的位置,对吗?
如果是这样,它在哪里,代码中的那个在这里:/var/mobile/Applications/65B5541A-1E73-46F6-AB5A-C5988003103E/Documents/paths.db 但这不是我拖入xcode的那个。我还查看了管理器,我可以看到文档/paths.db,但由于它错过了其他文件,我还假设这是创建数据库的代码,而不是拖入的代码。我也尝试删除它,但我无法选择它。
有人可以帮忙吗?
在标题中:
@property (strong, nonatomic) NSString *databasePath;
@property (nonatomic) sqlite3 *pathDB;
以 .m 为单位:
- (void) createDataBaseIfNotExist {
NSString *docsDir;
NSArray *dirPaths;
// Get the documents directory
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = dirPaths[0];
// Build the path to the database file
_databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent:@"paths.db"]];
NSLog(@"databasePath: %@", _databasePath);
NSFileManager *filemgr = [NSFileManager defaultManager];
if ([filemgr fileExistsAtPath: _databasePath] == NO) {
const char *dbpath = [_databasePath UTF8String];
if(sqlite3_open(dbpath, &_pathDB) == SQLITE_OK) {
char *errMsg;
const char *sql_stmt =
"CREATE TABLE IF NOT EXISTS Paths (ID INTEGER PRIMARY KEY AUTOINCREMENT, START INTEGER, END INTEGER, DISTANCE REAL, NODES TEXT)";
if (sqlite3_exec(_pathDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK)
{
//_status.text = @"Failed to create table";
NSLog(@"Failed to create table");
}
sqlite3_close(_pathDB);
} else {
// _status.text = @"Failed to open/create database";
NSLog(@"Failed to open/create database");
}
}
}