一种合理,现代的方式来存储和检索iOS应用程序中的单个信息

时间:2014-02-26 04:39:25

标签: ios ios7

我已经做了一段时间的iOS,但从来没有全职,也没有一段时间,所以请考虑这是“这是2014年类型问题的合理做法”

我想存储一个iPhone应用程序的单个信息字符串(要连接的主机),它将反映不同的api指向(staging.domain.comdomain.comlocalhost )。这样做的正确,现代的方法是什么?我目前正在使用plist条目然后

NSString *host = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"host"];

该信息仅在应用程序中的4个不同位置使用,因此理想情况下将是静态全局对象或某些内容(如rails config.rb);我不想要任何幻想。全局单身对象会更好吗?或者使用UIApplication delegate?我没有使用核心数据。

4 个答案:

答案 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中导入该头文件,即可在单个文件中组织所有配置。