私のシミュレーターは問題なく高速に動作します。データベースを作成して入力しようとしている部分で、iPhone がフリーズしているようです。ただし、ユーザーがデータベースを再作成する必要がないように、シミュレーターのデータベースを使用してそれを iPhone に配置することを好みます。私が知りたいのは、フォルダーに追加されたデータベースからどのようにロードできるかです。
私はたくさん検索しましたが、それは時代遅れであるか、私が望むものとは異なります. データベースファイルをファインダーからxcodeプロジェクトに追加しました。私が正しければ、_databasePath を変更して、ファイルがどこにあるかを指すようにする必要があります。正しいですか?
もしそうなら、コードからのものはここにあります: /var/mobile/Applications/65B5541A-1E73-46F6-AB5A-C5988003103E/Documents/paths.db しかし、それは私が xcode にドラッグしたものではありません。また、オーガナイザーを見て、そこにdocuments/paths.dbが表示されますが、他のファイルが見つからないため、それは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");
}
}
}