可以使用 NSFileManager 处理从 UIManagedDocument 创建的核心数据数据库吗?

Posted

技术标签:

【中文标题】可以使用 NSFileManager 处理从 UIManagedDocument 创建的核心数据数据库吗?【英文标题】:is it OK to handle a Core Data database created with from an UIManagedDocument with NSFileManager? 【发布时间】:2012-09-03 05:02:06 【问题描述】:

我正在制作一个使用 Core Data 的应用程序,为了我的应用程序的目的,我需要将一个预填充的数据库与应用程序包捆绑在一起

我正在使用UIManagedDocument

为此,我使用应用程序创建了数据库,然后加载了数据。然后我在我的 Mac 中搜索 ios Simulator 文件夹并将persistentStore 文件拖放到应用程序包中。

稍后在代码中我将其复制到NSDocumentDirectory,因为用户将被允许在运行时编辑数据库。这是通过以下方法完成的:

if(![[NSFileManager defaultManager] fileExistsAtPath:[self.appDatabase.fileURL path]])
        
    // COPY FROM BUNDLE

    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *DB = [[paths lastObject] stringByAppendingPathComponent:@"Default App Database"];
    DB = [DB stringByAppendingPathComponent:@"StoreContent"];

    [fileManager createDirectoryAtPath:DB withIntermediateDirectories:YES attributes:nil error:&error];

    NSLog(@"create directory error: %@",error);

    DB = [DB stringByAppendingPathComponent:@"persistentStore"];

    NSString *shippedDB = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"persistentStore"];
    NSLog(@"%d",[fileManager fileExistsAtPath:shippedDB]);
    [fileManager copyItemAtPath:shippedDB toPath:DB error:&error];

    NSLog(@"Copy error %@",error);

一切正常!但是,我不确定这是否会产生某种类型的错误。所以我的问题是,可以使用 NSFileManager 处理从 UIManagedDocument 创建的 Core Data 数据库吗?

而且,Apple 会在审核过程中抱怨捆绑persistentStore 文件吗?

【问题讨论】:

【参考方案1】:

在“核心数据编程指南”中明确提到了将默认持久存储与应用程序捆绑:

如何使用默认数据初始化存储?

...

您可以创建一个单独的持久存储,其中包含默认 数据并将商店作为应用程序资源包含在内。当你想要的时候 要使用它,您必须将整个商店复制到合适的 位置,或将对象从默认存储复制到现有 商店。

【讨论】:

以上是关于可以使用 NSFileManager 处理从 UIManagedDocument 创建的核心数据数据库吗?的主要内容,如果未能解决你的问题,请参考以下文章

我如何保存在 NSFileManager 中?

NSFileManager 线程安全

目标c从NSFileManager文件路径加载AVAsset

是否有类似 NSFileManager.enumeratorAtPath 的东西,它需要从递归中排除的目录列表?

NSFileManager类与文件操作

NSFileManager类与文件操作