私はこのアプリを iPhone 用に作成しており、sqlite を使用する必要があります。sqlite に大量のデータを事前にロードし、その sqlite ファイルをプロジェクト フォルダーにコピーしました。アプリを起動すると、sqlite データ ファイルがシミュレーターのアプリ ファイル (ドキュメントの場所) にコピーされていないようです。これが私のコードです:
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *dbPath = [documentsDir stringByAppendingPathComponent:@"moviedbl.data"];
BOOL success = [fileManager fileExistsAtPath:dbPath];
if(!success){
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: @"moviedbl.data"];
//NSString *defaultDBPath = [[NSBundle mainBundle] pathForResource:@"moviedbl" ofType: @"data"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
if(!success){
NSAssert1(0, @"Failed to create writable database file with message '%'.", [error localizedDescription]);
}
}
defaultDBPath は、シミュレーターの app フォルダーを参照しているようです。このフォルダーには、もともと sqlite ファイルが含まれておらず、実際には sqlite ファイルがコピーされるのを待っています。私が理解していることから、ファイルをコピーするには、バンドルからファイルを取得し (バンドルがプロジェクト フォルダーを参照しているかどうかはわかりませんが、プロジェクト フォルダーであると仮定しました)、シミュレーターにコピーする必要があります。私はこれで何日も立ち往生しています。教えてください...よろしくお願いします!!!
更新:結局、実際に機能するようになりました。最初はmainBundleなどからファイルをコピーしていないからだと思っていたのですが、パスにある.appの実体フォルダを開いたところコピーしていたことが判明。データベースが実際に含まれていることがわかりました。奇妙なことに、ファイルの種類がないのですが、xCode ではファイルの種類が "data" と表示されるため、ofType: @"data" を使用し続けました。最終的に ofType: @"" に変更したところ、うまくいきました! いずれかの方法!愚かな私ですが、助けようとした皆さんに感謝します!! :D