我的模擬器運行良好且快速。我的iPhone似乎凍結在我嘗試創建並填充數據庫的部分。不過,我更喜歡使用模擬器中的數據庫,並將它放在iphone上,這樣用戶不必重新創建數據庫。 我想知道的是如何從數據庫中加載到文件夾中。替換/加載iphone上的數據庫
我搜索了很多,但它是過時的或與我想要的不同。 我現在從查找器中將數據庫文件添加到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");
}
}
}
謝謝,非常完整的答案 – clankill3r 2013-05-05 10:14:49