Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从多目标应用程序中的特定plists获取字符串值?_Ios_Objective C_Xcode5_Plist_Info.plist - Fatal编程技术网

Ios 如何从多目标应用程序中的特定plists获取字符串值?

Ios 如何从多目标应用程序中的特定plists获取字符串值?,ios,objective-c,xcode5,plist,info.plist,Ios,Objective C,Xcode5,Plist,Info.plist,在我的应用程序中有五个目标。每个目标都有自己的plist 构建目标时,我想在AppDelegate中获取2个URL。这两个URL对于每个目标都是不同的。共有5个plist(MyApp1 Info.plist,MyApp2 Info.plist,MyApp3 Info.plist,MyApp4 Info.plist,MyApp5 Info.plist)。每个都只有一个目标 我已将这些URL放在plists中。如果我构建MyApp2,那么我应该从MyApp2 Info.plist获取URL。我该怎么

在我的应用程序中有五个目标。每个目标都有自己的plist

构建目标时,我想在
AppDelegate
中获取2个URL。这两个URL对于每个目标都是不同的。共有5个plist(
MyApp1 Info.plist
MyApp2 Info.plist
MyApp3 Info.plist
MyApp4 Info.plist
MyApp5 Info.plist
)。每个都只有一个目标

我已将这些URL放在plists中。如果我构建
MyApp2
,那么我应该从
MyApp2 Info.plist
获取URL。我该怎么做?还是有更好的方法


提前感谢。

在多个目标中使用公共源文件的更好方法是使用针对每个目标的不同预处理器宏。这将指示源文件执行不同的操作,或使用不同的值,具体取决于编译的目标

例如,假设您通过在Xcode构建设置中设置标志
-DTARGET=1
-DTARGET=2
,将预压器宏
目标设置为
1
-DTARGET=2
,将其设置为
1
-DTARGET=2
,则源文件可以使用不同的URL,如下所示:

#if TARGET == 1
#define URL "http://one.com"
#elif TARGET == 2
#define URL "http://two.com"
#else
#error Invalid TARGET value
#endif
然后你就走了

显然,您也可以使用此方法提供任意数量的条件编译,例如:

#if TARGET == 1
doSomethingDrastic();
#endif

与在
.plist
文件中嵌入内容相比,这是一种更简单、更传统的定义每个目标行为的方法。

您希望在与目标连接的build?.plist期间从
.plist
文件中提取数据。是的,您需要调用构建阶段脚本(运行
/usr/libexec/Plistbuddy
)。你想对提取的值做什么?这些URL正在我的整个应用程序中使用。但是对于每个目标来说是不同的。最好对每个目标使用一个单独的常量,在目标的构建设置中指定每个不同的值,然后在头文件中添加
#如果已定义(TARGET1)#定义URL“url1”#elif已定义(TARGET2)#定义URL“url2”…
并忘记
.plist
文件(太多了)对不起,我还有一件事要问。我添加了一个调试预处理器宏,如下所示:“Debug=1URL”。我是否也需要添加发布预处理器宏。如果是,那么它应该像“RELEASE=1url”或其他什么吗?@Piscean这个定义看起来根本不对(在
1
URL
之间应该没有空格),但是,你不需要指定
RELEASE
宏(没有
DEBUG
意味着“释放模式”)。我改变了它,它为我工作。我只是不知道是否还需要为发布添加宏。所以我把它留为空以便发布?@Piscean当然,在调试和发布中都需要特定于目标的宏,但它们对于每个目标都应该是相同的值,并且应该使用
#error
预处理器语句捕捉未定义的情况(如我的回答所示),作为安全措施。