我正在尝试创建一个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,似乎网址仍未正确编码。任何人都知道确保编码有效的额外步骤吗?
答案 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];