UIImage imageWithContentsOfFile正确的pathForResource。

3

我有资源:

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"

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

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


不要重命名它们 - user2545330
4个回答

5

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


1
你应该使用适当的扩展名获取捆绑包中的文件列表。
NSArray *files = [[NSBundle mainBundle] pathsForResourcesOfType:[myObject.filename pathExtension] inDirectory:nil];

现在,您需要遍历数组files并尝试匹配您的文件名。这可以使用NSArray的方法- (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate(干净的方式)或通过循环遍历数组(老派的方式)来完成。
谓词在谓词编程指南中有描述。
对于老派的方法,只需像这样循环:
for (String *file in files)
{
    if ([file caseInsensitiveCompare:myObject.filename] == NSOrderedSame) 
    {
        // do whatever you need to do with the file

        break; // stop the loop
    }
}

1

1

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

iOS基本上包含HFSX文件系统,该文件系统区分大小写。因此,如果不重命名文件,则无法获取正确的资源。 参考this

另一个选择是,如果您有存储在任何目录中的文件,则可以从该目录解析,然后进行不区分大小写的过滤以获取匹配名称,并使用该名称从目录获取确切的文件名,然后传递给pathForResourceofNSBundleapi。 请参阅此处以获取目录中文件名的列表


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接