【问题标题】:NSBundle pathForResource not workingNSBundle pathForResource 不起作用
【发布时间】:2012-10-30 20:30:23
【问题描述】:

在 iOS 6 上,这段代码可以正常工作:

- (NSString*)cLocalImageName
{
     [self willAccessValueForKey:@"cLocalImageName"];
     NSString*pathToImage;
     if ([self.cIsUserCreated boolValue]) {
         pathToImage =  [self primitiveValueForKey:@"cLocalImageName"];
     }else{
         pathToImage = [[NSBundle mainBundle] pathForResource:[self primitiveValueForKey:@"cLocalImageName"] ofType:@".png"];
     }
     [self didAccessValueForKey:@"cLocalImageName"];
     return pathToImage;
}

即这一行总是返回正确的文件路径:

 pathToImage = [[NSBundle mainBundle] pathForResource:[self primitiveValueForKey:@"cLocalImageName"] ofType:@".png"];

但是,在 iOS 5 上,该行总是返回 nil,而我必须调用:

 pathToImage = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",[self primitiveValueForKey:@"cLocalImageName"]]];

谁能告诉我为什么这是 iOS 5 上的问题?

我已经排除的事情:

• [self primitiveValueForKey:@"cLocalImageName"] 没有返回 nil。

• 构建应用后,.png 对象实际上存在于已编译的 .app 包中。

【问题讨论】:

  • 我什至懒得问为什么primitiveValueForKey会返回一个不是原始值的NSString。
  • 这是一个核心数据的东西,我认为他们使用的原始意义与规范不同。

标签: objective-c ios nsbundle


【解决方案1】:

这行不应该:

pathToImage = [[NSBundle mainBundle] pathForResource:[self primitiveValueForKey:@"cLocalImageName"] ofType:@".png"];

是这样的:

pathToImage = [[NSBundle mainBundle] pathForResource:[self primitiveValueForKey:@"cLocalImageName"] ofType:@"png"];

?

【讨论】:

  • 天哪,我没有意识到我已经包含了'.',但现在你提到它我意识到我通常不会那样做。知道为什么“.png”适用于 iOS 6 吗?他们一定改变了方法检查扩展的方式?
  • 也许他们意识到这是一个常见的拼写错误,他们可以轻松处理,或者可能只是对实现进行更改的副作用?有点烦人,但它适用于一个而不是另一个!
  • 哈。谢谢保尔贝利。是的,iOS5 不喜欢 '.'。符号,但 iOS6 处理得很好。很难弄清楚那个!
  • 是的,我最近搬到了 iOS 7,今天我必须修复 iOS 5 上的这个错误。很明显,iOS 7 和 iOS 6 比 iOS5 更智能,因为它们可以更好地适应。
  • 是的!它有很大帮助......伟大的工作。
猜你喜欢
  • 1970-01-01
  • 2011-04-26
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 2023-03-03
相关资源
最近更新 更多