UIImage imageWithContentsOfFile正确的pathForResource

时间:2014-02-27 08:07:19

标签: ios objective-c uiimageview uiimage

我有资源:

Test.png
test1.jpg
tesT2.jpg
tEst3.jpg

我需要在UIImageView中显示此图片。所以我写道:

imgView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[myObject.filename stringByDeletingPathExtension] ofType:[myObject.filename pathExtension]]];

myObject是我模型中的实体。我从xml获得filename,但在xml中它的格式如下:

filename="test.png"
filename="test1.jpg"
filename="test3.jpg"
filename="test3.jpg"

所以我的图片是(null),因为在pathForResource中我搜索@"test" ofType "png",但需要@"Test" ofType"png"

如何在不重命名的情况下获取正确的资源?

4 个答案:

答案 0 :(得分:5)

如果您无法重命名源数据(您应该这样做),那么您需要使用文件管理器获取所有可用文件的列表,然后执行不区分大小写的过滤器以获得匹配名称并使用它。

答案 1 :(得分:1)

您可以从捆绑包中获取所有资源,在此处查看答案Count of images in my NSBundle mainBundle bundlePath 并手动检查需要加载的图片名称

答案 2 :(得分:1)

您应该使用

的相应扩展名获取捆绑包中的文件列表
NSArray *files = [[NSBundle mainBundle] pathsForResourcesOfType:[myObject.filename pathExtension] inDirectory:nil];

现在您浏览数组files并尝试匹配您的文件名。这是使用NSArray的方法- (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate(干净的方式)或循环遍历数组(旧学校方式)完成的。

谓词在Predicate Programming Guide

中描述

对于旧学校的方法,只需循环:

for (String *file in files)
{
    if ([file caseInsensitiveCompare:myObject.filename] == NSOrderedSame) 
    {
        // do whatever you need to do with the file

        break; // stop the loop
    }
}

答案 3 :(得分:1)

如何在不重命名的情况下获取正确的资源?

Basically iOS contains HFSX file system which is case sensitive. So without renaming the files it is not possible to get the correct resources.请参阅this

Also the other alternative is, as @wain said, if you have file store in any directory, then you can just parse from that directory and then do a case insensitive filter to get the matching name and use that for fetching the exact filename from directory and then pass into pathForResource of NSBundle api. Refer this for getting the list of file names from directory