获取Core Data中的文件路径

时间:2014-09-12 05:39:49

标签: ios core-data path

是否可以获取存储在Core Data中的文件的路径,或者我是否只能提取文件本身?我需要在Core Data中存储为NSData属性的文件的路径,而不是数据库本身。一些iOS功能经常要求NSURL而不是文件本身,我还没有弄清楚如何将它与Core Data结合起来。

2 个答案:

答案 0 :(得分:2)

如果您使用的是SQLite,则数据库中没有“文件”。数据库是单个文件。

如果要在数据库中存储二进制数据,则无法直接访问其下的文件(即使假设您使用外部存储作为选项)。

如果您希望直接访问Core Data下的SQLite数据库内的文件,那么您需要自己将其写入另一个文件。

答案 1 :(得分:0)

您可以通过以下方式获取相关的NSURL:

NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *documentsDirectory = [[fileManager URLsForDirectory:NSDocumentDirectory
                                                     inDomains:NSUserDomainMask] firstObject];
NSString *documentName = @"YOUR_DATABASE_NAME";
NSURL *url = [documentsDirectory URLByAppendingPathComponent:documentName];

要在更宏大的环境中查看它,通常是如何设置UIManagedDocument以使用Core Data:

NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *documentsDirectory = [[fileManager URLsForDirectory:NSDocumentDirectory
                                                 inDomains:NSUserDomainMask] firstObject];
NSString *documentName = @"YOUR_DATABASE_NAME";
NSURL *url = [documentsDirectory URLByAppendingPathComponent:documentName];
self.document = [[UIManagedDocument alloc] initWithFileURL:url];

BOOL fileExists = [fileManager fileExistsAtPath:[url path]];
if (fileExists) {
    [self.document openWithCompletionHandler:^(BOOL success) {
        if (success) {
            self.context = self.document.managedObjectContext;
            // Post notification so others can gather the document and context
            [[NSNotificationCenter defaultCenter] postNotificationName:@"DatabaseReady"
                                                                object:self];
        }
        if (!success) NSLog(@"couldn't open file at %@", url);
    }];
} else {
    [self.document saveToURL:url
            forSaveOperation:UIDocumentSaveForCreating
           completionHandler:^(BOOL success) {
               if (success) {
                   self.context = self.document.managedObjectContext;
                   // Post notification so others can gather the document and context
                   [[NSNotificationCenter defaultCenter] postNotificationName:@"DatabaseReady"
                                                                       object:self];
               }
               if (!success) NSLog(@"couldn't open file at %@", url);
           }];
}