1

シミュレーターを実行するたびに、アプリ内のデータベース(作業中のデータベース)をどのように置き換えることができますか?(まだデータを追加していて、見栄えが良いことを確認したい)

これを試しましたが、まだ古いデータベースを使用しているため、機能していないようです。

- (void)viewDidLoad
{
    dbname = @"animaldatabase.sql";
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [documentPaths objectAtIndex:0];
    dbpath = [documentsDir stringByAppendingPathComponent:dbname];

    [self checkAndCreateDatabase];
    [self readAnimalsFromDatabase];

    [super viewDidLoad];
    // Do any additional setup after loading the view.

    mylabel.text = [NSString stringWithFormat:@"%d", [animals count]];
}

- (void) checkAndCreateDatabase{
    BOOL success;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    success = [fileManager fileExistsAtPath:dbpath];
    if (success) {
     //return;
        [fileManager removeItemAtPath:dbpath error:nil];
    }

    NSString *dbPathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:dbname];
    [fileManager copyItemAtPath:dbPathFromApp toPath:dbpath error:nil];
}

また、iPhoneデータベースの場所はどこですか?私のアプリがデータベースをiPhoneにコピーすると、どこに行き着きますか?

アップデート

読み込みコードも追加しました。

センチルクマール:

これで問題がどのように解決されるかわかりませんか?これは、コピーまたはデータベースがすでに存在する場合はそれをスキップするだけではありませんか?

私が欲しいのは私のiphoneアプリでデータベースを削除することです。新しいデータベースをインポートして実行します。

4

2 に答える 2

0

その代わりに次のコードを使用してください。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
 databaseName=@"yourfileName.sqlite";
 NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
 NSString *documentsDir = [documentPaths objectAtIndex:0];
 databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; 
[self checkAndCreateDatabase]; 

}
-(void) checkAndCreateDatabase {

BOOL success;


NSFileManager *fileManager = [NSFileManager defaultManager];

success = [fileManager fileExistsAtPath:databasePath];

if(success) return;
else
    printf("NO File found");

NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];

[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];

}
于 2012-07-06T09:29:37.590 に答える
0

ファイルマネージャーの操作をデバッグするにはerror、次のようにパラメーターを試して使用することをお勧めします。

NSError* error;
[fileManager copyItemAtPath:dbPathFromApp toPath:dbpath error: &error];
if (error != nil) {
    NSLog(@"copyItemAtPath generated error=%@", [error localizedDescription]);
}

これを行うと、エラーメッセージがデバッガコンソール/標準出力ウィンドウに書き込まれます。

于 2012-07-06T20:48:07.940 に答える