2012-03-20 8 views
1

エンティティ "Word"はinputSoundとoutputSoundの2つのプロパティですが、どちらも小さく、約10KBのオーディオファイルですが、4000個のインスタンスが存在します私のSQLデータベースで。コアデータと10 000オーディオファイル

まず、SQLにバイナリデータとして格納しようとしましたが、かなり遅くなりました。 これで「外部レコードファイルに保存」オプションが見つかりました。これが私に役立つかどうか、またはエンティティプロパティのオーディオファイルにURLを保存するほうがよいかどうか尋ねたいと思っていますか?

最初の方が良ければ、最初の起動時に、既存のストアをBundleからドキュメントディレクトリに移動するにはどうすればよいですか?

私はちょうどSQLに対処しています(私のアプリの開発者のところで私にはあらかじめ紹介されています)。しかし、これはどうすればいいですか?そして、バックグラウンドで何とかして最初のより速く、よりユーザーフレンドリーな起動?

これは推奨される方法があると思われる(それらの「多く」のあなたのケースにも適用することができますが、特に大規模なもの)私は今、バイナリの場合

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{ 

if (__persistentStoreCoordinator != nil) 
     return __persistentStoreCoordinator; 

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
         [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
         [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]; 
NSString *defaultStore = [documentsDirectory stringByAppendingPathComponent:@"Easy10.sqlite"]; 

NSString *sqliteInBundle = [[[NSBundle mainBundle] pathForResource:@"Easy10" ofType:@"sqlite"]stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Easy10.sqlite"]; 
NSError *error =nil; 
NSFileManager *fileManager = [NSFileManager defaultManager]; 

if (![fileManager fileExistsAtPath:defaultStore]) 
    [fileManager copyItemAtPath:sqliteInBundle toPath:defaultStore error:&error]; 



__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; 
[__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error];  
return __persistentStoreCoordinator; 

}

答えて

2

それを行う方法ですコアデータを使用してメタデータを格納するには、実際のバイナリ自体にファイルパスを含むが含まれています。したがって、これらのものをアプリケーションのサンドボックスのどこかに格納します(つまり、 "Documents"ディレクトリ内の作成のサブディレクトリ)。次に、[NSData dataWithContentsOfFilePath]などを使用して、実際にそれらを再生したいときにバイトを取得できますが、コアデータのフェッチは、それらのバイトをシャベルすることによって減速しません。

コアデータを最適化するWWDCのビデオを見てください。インストゥルメントの使用方法と追加の "SQLデバッグタイミング"スイッチの優れた例は、最適化しているものが実際に最適化されていることを確認します。 :)

+0

あなたはWWDC 11とは異なることを話しています。セッション303 - iOSのコアデータの新機能私は今朝それを見て、「外部記録ファイルに保存」オプションを見つけました。それは私の方法ではないと思います? –

+0

あなたにはうまくいくかもしれませんが、iOS 4以前のバージョンをサポートする必要がある場合は、「新機能」の機能に注意する必要があります。パスを保存し、自分自身を取得/削除する方法は、iOS2に至るまで働いています:) –

+0

私はiOS5のみをサポートします) –

関連する問題