iOS Core Data 无法从存储的 URI 打开图像

Posted

技术标签:

【中文标题】iOS Core Data 无法从存储的 URI 打开图像【英文标题】:iOS Core Data can't open image from stored URI 【发布时间】:2012-11-27 13:44:23 【问题描述】:

在我的应用程序中,我将图像存储在我的文档文件夹中,并将它们的 URI 存储在数据库中。

每当我尝试根据存储在数据库中的 URI 加载图像时,结果都会返回“nil”。

存储的 URI 如下所示:

/用户/我的名字/图书馆/应用程序支持/iPhone 模拟器/6.0/Applications/78325CF9-73B0-4D0D-B136-FD8FF8D837C1/Documents/WC_45FEAF25-AC0C-4E91-A5E2-AA48215F1E48-3147-000005C6C9E65B42.jpg

当我从 iTerm 中查看它时,我看到图像在那里,但在 iTerm 中我必须像这样 cd 进入目录:

/Users/myname/Library/Application\ Support/iPhone\ 模拟器/6.0/Applications/78325CF9-73B0-4D0D-B136-FD8FF8D837C1/Documents/WC_45FEAF25-AC0C-4E91-A5E2-AA48215F1E48-3147-000005C6C9E65B42.jpg

注意空格前的反斜杠

我正在尝试使用此功能获取图像:

-(UIImage *) getImageFromURL:(NSString *)fileURL 
    UIImage * result;

    NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]];
    result = [UIImage imageWithData:data];

    return result; //result is always nil

问题与反斜杠有关吗? 非常感谢任何帮助!

此致,

佐利

【问题讨论】:

你不应该使用[NSURL fileURLWithPath:fileURL]吗? 为什么? URLWithString 正是要使用的函数 因为看起来你使用的是本地文件URL,但是如果它前面没有包含file://,则需要使用fileURLWithPath进行转换。 你能提供一个代码来解释你是怎么做的吗? 和你得到的完全一样,把URLWithString:换成fileURLWithPath:... 【参考方案1】:

解决方案是不在数据库中存储 uri,只存储图像名称。 (但仍将图像存储在文档目录中) 然后使用以下函数可以检索图像:

- (UIImage*)loadImageWithName:(NSString*) name

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                         NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString* path = [documentsDirectory stringByAppendingPathComponent:
                      [NSString stringWithString: name] ];
    UIImage* image = [UIImage imageWithContentsOfFile:path];
    return image;

【讨论】:

以上是关于iOS Core Data 无法从存储的 URI 打开图像的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 中的 URI 类型属性:如何使用 NSPredicate 进行查询

无法将 NSDate 从 Parse 存储到 Core Data

在 Core Data 中,NSManaged 对象上的 URI 属性类型应该用于啥?

Core Data - 通过 URI 获取托管对象

将 JSON 数据转换并存储为 iOS Core Data

将 iOS 应用从 NSCoding 转换为 Core Data