3

アプリ内にリセット関数を作成しています。これにより、sqlite データベースが事前入力されたデータで元の状態に復元されます。以下のコードは、ドキュメント ディレクトリからデータベースを削除し、バンドルからデータベースをコピーしますが、データは古いデータベースからまだ表示されますか?

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"MoneyMonthly.sqlite"];

 if([[NSFileManager defaultManager] fileExistsAtPath:filePath]){ 

    [[NSFileManager defaultManager]      removeItemAtPath:filePath error:nil]; 

}

BOOL success; 
NSFileManager *fileManager = [NSFileManager defaultManager]; NSError *error;

NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"MoneyMonthly.sqlite"]; 
 NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"MoneyMonthly.sqlite"]; 

 success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error]; 

if (!success) {

    NSAssert1(0, @"Failed to create writable   database file with message '%@'.", [error localizedDescription]); 
}
4

2 に答える 2

2

既存の sqlite データベースを閉じてから、バンドルから再度コピーして、既存のデータベースを上書きします。基本的には、最初にコピーしたときと同じ方法で行います。

于 2012-11-11T21:46:40.697 に答える
2

私は自分のアプリの1つでこれを行います。アプリのバンドルに事前構築済みのデータベース ファイルを保持しています。このデータベースには、すべてのテーブルとサンプル データがあります。

ユーザーのデータベースをリセットする必要がある場合は、データベースをシャットダウンしてから、バンドルからのクリーン コピーでデータベースを上書きします。

于 2012-11-11T21:47:49.830 に答える