我有一个实体“Word”,其中有两个属性 - inputSound 和 outputSound,它们都很小,大约 10KB 的音频文件,但在我的 SQL 数据库中会有 4000 个这个实体的实例。
首先,我尝试将它们作为二进制数据存储在我的 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;
最佳答案
对于二进制文件(尤其是大二进制文件,尽管您的“很多”二进制文件也适用)推荐的方法似乎是使用 Core Data 来存储元数据,包括文件路径到实际的二进制文件本身。因此,您会将这些东西存储在应用程序沙箱中的某个位置(即,可能是您在“文档”目录中创建的子目录)。然后你可以使用 [NSData dataWithContentsOfFilePath]
或类似的方法在你想播放它们时实际获取字节,但是你的核心数据获取不会因为试图铲掉这些字节而减慢。
一定要看看有关优化核心数据的 WWDC 视频。关于如何使用 Instruments 和额外的“SQL Debug Timing”开关以确保您正在优化的内容……真正得到优化的绝佳示例。 :)
关于objective-c - 核心数据和 10 000 个音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9784795/