iOSの

2016-08-05 1 views
0

で行方不明のファイル私はかなり標準的な方法であると考えているものの中にそのデータベースを見つけiOSアプリを持っている、すなわち:iOSの

+ (NSString *)dbPath 
{ 
    NSArray *a = 
     NSSearchPathForDirectoriesInDomains(NSCachesDirectory, 
              NSUserDomainMask, YES); 

    NSString *dir = [a objectAtIndex:0]; 
    return [dir stringByAppendingPathComponent:[self dbFile]]; 
} 

ここDBFILEは、単にデータベースファイルの名前を返す関数です。

最近、ユーザーがデータベースを見つけられないことがあるという苦情がありました。私が間違っていることは何ですか?私は、iOSの最新の変更について行っていません。

+4

「NSCachesDirectory」に保存したものは、システムによって削除される可能性があります。 – dan

+2

キャッシュディレクトリは、置き換えられないものには絶対に使用しないでください。 – rmaddy

+0

ありがとうございました。詳細は自分の回答をご覧ください。 –

答えて

0

今は覚えています。

アプリストアのレビュー担当者は、当初は使用しようとしていたディレクトリにデータベースを保存できないと言っていました。なぜなら、その内容はインターネットからダウンロードされたからです。彼は当然間違っていましたが、私はその時点で多くの問題を抱えていましたので、データベースを要求されたとおりにキャッシュ領域に移動しました。

これは、理由が削除されることがあるためです。

0

また、現在のプロジェクトのキャッシュにdbを保存します。ユーザーがアプリを実行すると、dbが正しく検索されます。主にFMDBで使用します。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory , NSUserDomainMask, YES); 
NSString *documentsDir = [paths objectAtIndex:0]; 
NSString *documentsDirectory = [documentsDir stringByAppendingPathComponent:strFileName]; 

if (![[NSFileManager defaultManager] fileExistsAtPath:documentsDirectory]) 
{ 
    NSString *backupDbPath = [[NSBundle mainBundle] pathForResource:@"DBName" ofType:@"sqlite"]; 

    NSLog(@"Test backuppath %@",backupDbPath); 
    if (backupDbPath == nil) 
    { 
     NSLog(@"Database path is nil"); 
    } 
    else 
    { 
     BOOL copiedBackupDb = [[NSFileManager defaultManager] copyItemAtPath:backupDbPath toPath:documentsDirectory error:nil]; 
     if (!copiedBackupDb) NSLog(@"Copying database failed"); 
    } 
} 
+0

これは役に立たないようです。 DBが読み取り専用の場合、キャッシュフォルダにコピーする必要はありません。バンドルからそれを読んでください。 DBが書き込み可能な場合、なぜそれを削除して変更を失うことができるキャッシュフォルダに保存するのですか? – rmaddy