0

我正在尝试创建一个包含主包中文件内容的 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对象对我来说是 nil。该文件肯定包含在我的主包中(因为我能够获得开始的 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

环顾谷歌,似乎该 URL 仍未正确编码。有人知道确保编码有效的额外步骤吗?

4

2 回答 2

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];
于 2012-10-08T16:56:31.613 回答
1

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

您应该使用+fileURLWithPath:基于文件的 URL:

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

NSURL *chordURL = [NSURL fileURLWithPath:chordPath];
NSData *chordImageData = [NSData dataWithContentsOfURL:chordURL];
UIImage *chordImage = [UIImage imageWithData:chordImageData];
于 2012-10-08T16:57:35.087 回答