我已经做了一段时间的iOS,但从来没有全职,也没有一段时间,所以请考虑这是“这是2014年类型问题的合理做法”
我想存储一个iPhone应用程序的单个信息字符串(要连接的主机),它将反映不同的api指向(staging.domain.com
,domain.com
或localhost
)。这样做的正确,现代的方法是什么?我目前正在使用plist条目然后
NSString *host = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"host"];
该信息仅在应用程序中的4个不同位置使用,因此理想情况下将是静态全局对象或某些内容(如rails config.rb
);我不想要任何幻想。全局单身对象会更好吗?或者使用UIApplication delegate
?我没有使用核心数据。
答案 0 :(得分:3)
你的代码很好,但是因为你在几个地方使用它,所以最好不要重复自己,并为此做一个帮助。
有几种方法可行 1- one将定义一个“普通”辅助函数, 2-另一个是在辅助“实用程序”类中定义类方法。这将集中您访问主机字符串的方式。
以下是一个独立帮助函数的示例。
MYUtility.h
中的:
extern NSString *MYHost();
在MYUtility.m中
NSString *MYHost() {
return [[NSBundle mainBundle] objectForInfoDictionaryKey:@"host"];
}
在使用时:
NSString *host = MYHost();
答案 1 :(得分:1)
NSUserDefault
是最好的方法。使用NSUserDefaults
,您可以保存以下类类型中的对象:
NSData
NSString
NSNumber
NSDate
NSArray
NSDictionary
EG。 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:firstName forKey:@"firstName"];
[defaults setObject:lastName forKey:@"lastname"];
[defaults setInteger:age forKey:@"age"];
[defaults setObject:imageData forKey:@"image"];
[defaults synchronize];
答案 2 :(得分:1)
NSUserDefaults可能有用或被滥用,它归结为您的情况的语义。
仔细阅读你的问题,对于一个简单的服务器路径,你可以制作一个只有少数static NSString *const nameOfThisServerPath = @"http://google.com";
声明的.h文件。没有@interface或其他类声明,只有那些静态字符串。
将该文件导入.pch文件,您将可以访问该服务器路径,就像它是应用程序中每个类的类变量一样。如果您不想将它封装在自己的文件中,您甚至可以在.pch文件中声明它。
.pch中的pre-proccesor宏会做同样的事情。选择你的毒药。
答案 3 :(得分:0)
最好你可以直接将主机链接添加到宏而不是像这样的
#define hostURL @"http://somewere.someone.com";
如果您想要从捆绑中反复获取数据意味着您可以定义像这样的宏
#define hostURL [[NSBundle mainBundle] objectForInfoDictionaryKey:@"host"];
将其中任何一个添加到.pch
文件中,即可让您访问整个应用程序。如果您有更多这样的配置,只需创建简单的头文件并将这些内容添加到该文件中,然后在.pch
中导入该头文件,即可在单个文件中组织所有配置。