iOS应用程序configuration文件

C#应用程序中,我总是使用app.config文件来保存一些数据,以便在需要时加载我的应用程序(例如连接string)。

在iOS应用程序中保存这种信息的最好方法是什么?

你可以创build一个属性列表文件(在XCode中有一个模板,就是文件 – >新build文件并在那里select),所以你会有类似“settings.plist”的东西,或者类似的东西。 你可以把plist想象成key => valueconfiguration文件,不同之处在于除了纯文本之外,你还可以存放数组和字典。

使用NSBundle来加载你的应用程序中的文件,如

 NSString *path = [[NSBundle mainBundle] pathForResource:@"settings" ofType:@"plist"]; NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:path]; 

然后,您可以将您的密钥作为常规字典访问。 只是不要忘记[释放]之后;)。

对于像连接string这样的小数据,我会使用NSUserDefaults 。

当你想保存你的连接string,你会这样做:

 [[NSUserDefaults standardUserDefaults] setObject:myConnectionString forKey:@"connectionString"]; 

当你想加载它,你会这样做:

 myConnectionString = [[NSUserDefaults standardUserDefaults] stringForKey:@"connectionString"]; 

如果你只是存储一个相对简单的configuration的东西,你可以简单地使用NSDictionary的序列化方法(我不知道如何链接到类文档中的方法目录):

 NSString *settingsPath = [@"~/pathtoconfig.plist" stringByExpandingTildeInPath]; NSMutableDictionary *settings = [NSMutableDictionary dictionary]; if([[NSFileManager defaultManager] fileExistsAtPath:settingsPath]){ settings = [NSMutableDictionary dictionaryWithContentsOfFile:settingsPath]; } // writing settings [settings writeToFile:settingsPath atomically:YES]; 

既然我不知道你对objective-c有多熟悉,我还会注意到:

  • 在iOS中,主目录引用应用程序的沙盒目录 。
  • 我build议阅读一下参考计数。 虽然objective-c,从iOS5开始,现在自动引用计数 ,但还是有一些边缘情况需要注意( 这是一个关于ARC的SO问题 )

在iOs中,每个应用程序都拥有自己的沙箱,只有该应用程序才可用。 所以如果你想让这个文件只读取,请将其保存到Application Bundle中。 否则保存到Application文件夹。

你不能直接访问应用程序文件夹所以,如果你想保存你的文件到该文件夹​​,你必须以编程方式进行。

使用iOS 8.3的 Swift中的 iOS应用程序configuration文件:

  let path: String = NSBundle.mainBundle().pathForResource("Info", ofType: "plist")! let nsDictionaryInfoPlist: NSDictionary = NSDictionary(contentsOfFile: path)! // Usage example: Google Maps iOS SDK/API Configuration. GMSServices.provideAPIKey(nsDictionaryInfoPlist.objectForKey("GoogleMapsiOSAPIKey") as! String) 

我使用属性列表来存储小块数据 – 在这里看看如何使用它们:

http://iphoneincubator.com/blog/tag/nspropertylistserialization

我意识到我迟到了,但发现堆栈溢出之后,我对接受的答案感到沮丧,所以我创build了一个解决scheme! 这是基于来自@ RafaelSteil的答案的想法,但它有一个更简单的接口,caching加载的configuration数据,它支持豆荚提供自己的默认值,可以由主应用程序覆盖。 我希望它可以帮助别人。

更新了Swift 3 Xcode 8

将一个新的属性列表添加到名为“Sample.plist”的项目中。 然后看下面的例子。

  let path: String = Bundle.main.path(forResource: "Sample", ofType: "plist")! let sampleConf: NSDictionary = NSDictionary(contentsOfFile: path)! print(sampleConf.object(forKey: "test") as! String)