Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 获取核心数据中文件的路径_Ios_Core Data_Path - Fatal编程技术网

Ios 获取核心数据中文件的路径

Ios 获取核心数据中文件的路径,ios,core-data,path,Ios,Core Data,Path,是否可以获取存储在核心数据中的文件的路径,或者只能提取文件本身?我需要核心数据中存储为NSData属性的文件的路径,而不是数据库本身。一些iOS功能通常要求NSURL,而不是文件本身,我还没有弄清楚如何将其与核心数据结合起来。这就是获得相关NSURL的方法: NSFileManager *fileManager = [NSFileManager defaultManager]; NSURL *documentsDirectory = [[fileManager URLsForDirectory:

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

这就是获得相关NSURL的方法:

NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *documentsDirectory = [[fileManager URLsForDirectory:NSDocumentDirectory
                                                     inDomains:NSUserDomainMask] firstObject];
NSString *documentName = @"YOUR_DATABASE_NAME";
NSURL *url = [documentsDirectory URLByAppendingPathComponent:documentName];
要从更宏观的角度来看,这通常是您设置UIManagedDocument以处理核心数据的方式:

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);
           }];
}
如果使用SQLite,则数据库中没有“文件”。数据库是一个文件

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


如果您希望直接访问SQLite数据库中核心数据下的某些内容,则需要自己将其写入另一个文件。

谢谢,但这只提供了数据库的路径,对吗?我在数据库中查找一个文件,换句话说,就是数据库中某个属性的路径。我能得到的最接近的方法是使用
nameOfManagedObject.objectID.URIRepresentation
获取它所包含的对象的路径。更新第一篇文章,使其更加清晰。