2012-01-17 8 views
1

私はsqliteとfmdbラッパーを使用します。負荷デシベルのための私のコードはこれです:ios fmdbファイルからロードする

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *docsPath = [paths objectAtIndex:0]; 
NSString *path = [docsPath stringByAppendingPathComponent:@"biscuit.sqlite"]; 
FMDatabase *db = [FMDatabase databaseWithPath:path]; 

私は私のプロジェクトにbiscuit.sqliteを追加しますが、このコードではなく、既存のものを開いて新しいファイルを作成します。このファイルをロードするにはどうしたらいいですか?

答えて

2

あなただけのデータベースからデータを読みたい場合は、以下のコードを使用しようとは:

NSString *path = [[NSBundle mainBundle] pathForResource:@"biscuit" ofType:@"sqlite"]; 

あなたは読み出し/書き込みアクセスを必要とする場合は、最初の書き込み可能なユーザーフォルダにデータベースをコピーする必要があります。これは、あなたのアプリが拒否されます

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSError *error; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDir = [paths objectAtIndex:0]; 
NSString *dbPath = [documentsDir stringByAppendingPathComponent:@"biscuit.sqlite"]; 
BOOL success = [fileManager fileExistsAtPath:dbPath]; 
if (!success) { 

    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"biscuit.sqlite"]; 
    success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error]; 

    if (!success) { 
     NSLog(@"Failed to create writable DB. Error '%@'.", [error localizedDescription]); 
    } else { 
     NSLog(@"DB copied."); 
    } 
}else { 
    NSLog(@"DB exists, no need to copy."); 
} 
+0

、異なるパスを使用します。http://stackoverflow.com/questions/13896757/apps-must-follow-the-ios-data-storage-guidelines-or-they-を拒否されるアプリケーション – luqmaan

+0

".sqlite"接尾辞をドキュメントフォルダにドロップできますか? @luqmaan – Itachi

関連する問題