2010-11-07 46 views
4

在Xcode中,我使用目标来发布多个应用程序版本,这些应用程序版本共享一些基本代码并且倾向于具有不同的图形。界面生成器:根据目标选择媒体

。假装我的目标是JOHN,目标DOE。我可以将名为example.png的不同图像添加到捆绑包中,并分别针对每个图像。代码不需要以这种方式进行任何更改。

UIImageView *image = [UIImageView alloc] initWithImage:[UIImage imageNamed:@"example.png"]]; 

如果不是我叫每个不同版本的每个图像我最终会得到类似这样的东西:

NSString *imageName; 

#ifdef JOHN 
imageName = @"johnExample.png"; 
#else 
imageName = @"doeExample.png"; 
#endif 
UIImageView *image = [UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]]; 

有好几个版本,很多图片这个方法很快就会乱,具有常数一个巨大的文件在我看来像一个矫枉过正的,所以我最终选择了第一个选项。

的问题是:

虽然笔尖上的文件时,Interface Builder中只出现加载example.png随机。所以如果我正在处理目标JOHN这是一个烦恼,IB只是决定从DOE目标加载example.png

Interface Builder根据目标加载媒体有什么方法吗?

回答

1

就关闭该问题,答案是:

截至2011年1月,您无法在Interface Builder上加载基于目标的媒体,但您可以使用一些解决方法,如Digital Robot和我在问题中指出的自己的描述。

0

为何没有在代码的开头这样定义

#ifdef JOHN 
#define APP @"john" 
#elseif DOE 
#define APP @"doe" 
#endif 

,然后,你想用这个每一次,你可能有...

imagename = [NSString stringWithFormat:@"%@Example.png", APP]; 
+0

我试图避免这样的事情,但无论如何感谢。 – pablasso 2011-01-25 13:42:58

0

这应该工作。这可能是新的,因为一段时间过去了,我刚刚才了解到这一点。不知道这是可能的很久以前,当你acutally问这个问题:)但它可能是有用的寻找解决方案的其他人。

将目标添加到xcode中的项目时,它会在文件系统中创建一个子文件夹。每个taragt都有一个子文件夹。据我所知,基本思想是,所有常用文件位于项目主目录的上层,每个目标的独立文件位于各自的目录中。

(如文件的本地化版本的位。)

所以,你可以将约翰的形象example.png中/项目/约翰·多伊和的形象,example.png中/项目/ DOE。 您应该仔细检查每个图像的正确版本是否包含在每个目标的构建设置中。 (Copy Boundle Resources) 这样做“example.png”只在绑定中包含一次。随机加载一个或另一个图像应该不会再发生,尽管您在代码中将其称为“example.jpg”。