NSData不接受转义/ UTF8编码的URL

时间:2012-10-08 16:44:24

标签: ios nsurl

我正在尝试创建一个NSData对象,其中包含主包中文件的内容。

NSString *chordPath = [[NSBundle mainBundle] pathForResource:chordName ofType:@"png"];

NSURL *chordURL = [NSURL URLWithString:[chordPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSData *chordImageData = [NSData dataWithContentsOfURL:chordURL];
UIImage *chordImage = [UIImage imageWithData:chordImageData];

在使用stringByAddingPercentEscapesUsingEncoding之前,我收到了一个nil URL,所以我继续通过重新编码字符串来解决这个问题。现在我得到一个有效的URL,但chordImageData对象对我来说是零。该文件肯定包含在我的主包中(因为我能够获取URL开头)所以我想知道什么是错的。

编辑:

运行此:

NSData *chordImageData = [NSData dataWithContentsOfURL:chordURL options:NSDataReadingMapped error:&dataCreationError];

为错误获取此信息:

po dataCreationError
Error Domain=NSCocoaErrorDomain Code=256 "The operation couldn’t be completed. (Cocoa error 256.)" UserInfo=0x7530a00

环顾Google,似乎网址仍未正确编码。任何人都知道确保编码有效的额外步骤吗?

2 个答案:

答案 0 :(得分:1)

尝试使用fileURLWithPath:,如下所示:

NSString *chordPath = [[NSBundle mainBundle] pathForResource:chordName ofType:@"png"];

NSURL *chordURL = [NSURL fileURLWithPath: chordPath];
NSData *chordImageData = [NSData dataWithContentsOfURL:chordURL];
UIImage *chordImage = [UIImage imageWithData:chordImageData];

答案 1 :(得分:1)

应该没有必要进行百分比转义。您遇到问题的原因是您使用的是用于“非文件”网址的URLWithString:

您应该将+fileURLWithPath:用于基于文件的网址:

NSString *chordPath = [[NSBundle mainBundle] pathForResource:chordName ofType:@"png"];

NSURL *chordURL = [NSURL fileURLWithPath:chordPath];
NSData *chordImageData = [NSData dataWithContentsOfURL:chordURL];
UIImage *chordImage = [UIImage imageWithData:chordImageData];