我正在开发一个应用程序,我将包含图像的文件夹拖放到我的Xcode项目中。
当应用程序启动时,我会收集应用程序中图像的所有文件名,以便以后懒洋洋地加载它们:
-(NSArray *)fetchImagesInFolder:(NSString *)folderName{
NSArray *allImagesArray = [NSArray arrayWithArray:[[NSBundle mainBundle] pathsForResourcesOfType:nil inDirectory:folderName]];
if([allImagesArray count] == 0){
NSLog(@"No images found in %@", folderName);
return nil;
}
return allImagesArray;
}
这是我的问题:这只能工作1次,4次中有3次,[allImagesArray count]
为0。
然后我必须从项目中删除该文件夹,再拖放它,如果我之前选择了“为任何添加的文件夹创建组”,我将选择“为任何添加的文件夹创建文件夹引用”,反之亦然,清理,构建和运行。该解决方案在4次中有效3次。
如果我右键单击项目生成的.app文件,然后“显示包内容”,则图像始终存在。但那么为什么pathsForResourcesOfType:inDirectory:
如此不可靠呢?
答案 0 :(得分:3)
您是否查看了目标的构建阶段,“复制捆绑资源”部分,并了解系统如何将图像移动到捆绑中?我希望它不会复制文件夹本身,而只是将各种图像移动到一个公共目录中。
如果是这样,假设您拥有所有'jpg'或全部'png',那么请选择适当的后缀(比如'jpg')并执行此操作:
[NSBundle mainBundle] pathsForResourcesOfType:@"jpg" inDirectory:nil];
如果实际上你已经说服Xcode在包中实际创建一个目录,那么就像现在一样添加名称,但保留这个类型。
如果混合使用图像类型,则每次执行上述命令一次,然后将数组合并为超级数组。
编辑:如果您想将图像存储在各种文件夹中,我相信您需要编写一个“运行脚本”shell脚本来执行您想要的操作。虽然我自己没有采用这种技术,但我相信这是其他人在处理同样问题时所做的事情:
您将在此处和网上找到编写“运行脚本”的示例。我永远不会记得要使用哪些Xcode环境变量,所以总是只是转储一组,然后四处寻找。使用任何一个名称,您都可以谷歌搜索并找到提供更多信息的Apple文档。
答案 1 :(得分:1)
问题是我在添加文件夹时选择“为任何添加的文件夹创建文件夹引用”,然后尝试通过
访问图像 UIImage *img = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@",
[[NSBundle mainBundle] resourcePath], imageName]];
但这仅适用于图像位于.app的根目录中的情况,如果您选择“为任何添加的文件夹创建组”会发生这种情况。
在我的情况下,我想保留原始目录结构,所以我通过在我给imageWithContentsOfFile
的参数中包含图像的路径来解决问题:
NSString *imageName = [NSString stringWithFormat:@"%@", [NSString stringWithFormat:@"name-of-my-images-rootdirectory/%@/%@", [NSString stringWithFormat:@"%@", subdirectoryName], [normalImagesArray objectAtIndex:i]]];
UIImage *img = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], imageName]];