【问题标题】:NSBundle mainBundle pathForResource: Not working unless @2x includedNSBundle mainBundle pathForResource:除非包含@2x,否则不工作
【发布时间】:2014-03-24 15:47:57
【问题描述】:

我的项目中有名为:landing_load1@2x ...landing_load4@2x 的文件。 (没有非视网膜文件)

此代码有效:

for(int x=1; x < 5; x++){
    NSString * imageTitle = [NSString stringWithFormat:@"landing_load%i@2x", x];
    UIImage * loadingImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageTitle ofType:@"png"]];

    [loadingImages addObject:loadingImage];
}

但这不起作用:

for(int x=1; x < 5; x++){
    NSString * imageTitle = [NSString stringWithFormat:@"landing_load%i", x];
    UIImage * loadingImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageTitle ofType:nil]];

    [loadingImages addObject:loadingImage];
}

这不起作用:

for(int x=1; x < 5; x++){
      NSString * imageTitle = [NSString stringWithFormat:@"landing_load%i", x];
      UIImage * loadingImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:imageTitle ofType:nil]];

     [loadingImages addObject:loadingImage];
}

问题:我知道我不必显式调用@2x 或指定文件类型,所以除非我显式写出整个文件名,否则任何想法为什么它不起作用?

注意:在 iPad 4 上测试

【问题讨论】:

    标签: ios objective-c ipad filesystems nsbundle


    【解决方案1】:

    记录

    NSString * imageTitle = [NSString stringWithFormat:@"landing_load%i", x];
    

    意味着你有一对任何资源的图形文件——“filename.png”和“filename@2x.png”。 或者,或者,它可以用作仅“filename.png”的“别名” 如果您只有“filename@2x.png”,则有两种可能的变体: 1. 使用类似的东西

    NSString * imageTitle = [NSString stringWithFormat:"landing_load%i@2x", x];
    

    或同时拥有任何资源的文件(“filename.png”和“filename@2x.png”)。

    【讨论】:

      【解决方案2】:

      在“非”工作示例中,您没有在 ofType 参数中声明 nil

       UIImage * loadingImage = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle]     pathForResource:imageTitle ofType:nil]];
      

      更改为png,应该可以解决问题:)

      【讨论】:

      • 更新了问题。除非我添加@2x,否则仍然不起作用。谢谢
      【解决方案3】:

      因为你在使用

      -[NSBundle pathForResource:ofType:]
      

      方法,您需要在第二个参数中指定资源类型,在您说它有效的代码中以“png”的形式提供。

      【讨论】:

        【解决方案4】:

        @2x 是作为 [UIImage imageNamed:] 的一部分处理的,而不是作为 [NSBundle pathForResource:ofType:] 的一部分处理的,只需使用前者,您就可以开始了。

        【讨论】:

        • imageNamed 不释放图像并导致内存问题
        猜你喜欢
        • 2011-09-09
        • 2011-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        相关资源
        最近更新 更多