iOS Application Configuration File
在C应用程序中,我总是使用
在iOS应用程序中保存此类信息的最佳方法是什么?
您可以创建一个属性列表文件(Xcode中有一个模板,只需到file->new file并选择那里),这样您就可以得到类似于"settings.plist"的文件,或者类似的文件。您可以将plist看作是一个key=>value配置文件,不同的是,除了纯文本作为值之外,您还可以保存数组和字典。
使用nsbundle在应用程序中加载文件,例如
1 2 | NSString *path = [[NSBundle mainBundle] pathForResource:@"settings" ofType:@"plist"]; NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:path]; |
然后您可以作为常规字典访问您的密钥。只是不要忘记在;)之后释放它。
对于连接字符串之类的小数据位,我将使用nsuserdefaults。
当您想保存连接字符串时,可以这样做:
1 2 | [[NSUserDefaults standardUserDefaults] setObject:myConnectionString forKey:@"connectionString"]; |
当你想加载它时,你可以这样做:
1 2 | myConnectionString = [[NSUserDefaults standardUserDefaults] stringForKey:@"connectionString"]; |
如果您只是存储一组相对简单的配置资料,那么您可以简单地使用nsdictionary的序列化方法(我不知道如何链接到class doc中的methods目录):
1 2 3 4 5 6 7 8 9 | 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中,主目录是指应用程序的沙盒目录。
- 我建议在参考计数上多读一点。虽然objective-c,从ios5开始,现在自动为您计算引用计数,但是有一些边缘情况需要注意(这里有一个关于arc的问题)。
为Swift 3 Xcode 8更新
将新的属性列表添加到名为"sample.plist"的项目中。然后看下面的例子。
1 2 3 | let path: String = Bundle.main.path(forResource:"Sample", ofType:"plist")! let sampleConf: NSDictionary = NSDictionary(contentsOfFile: path)! print(sampleConf.object(forKey:"test") as! String) |
iOS应用程序配置文件,采用iOS 8.3的swift格式:
1 2 3 4 5 | 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) |
在iOS中,每个应用程序都有自己的沙盒,只能用于该应用程序。因此,如果您希望该文件是只读的,请将其保存到应用程序包中。否则保存到应用程序文件夹。
不能直接访问应用程序文件夹,因此如果要将文件保存到该文件夹,必须以编程方式进行。
我使用属性列表来存储小数据块-请在此处查看如何使用它们:
http://iphoneencator.com/blog/tag/nspropertylistserialization
我意识到我迟到了,但是在发现这个堆栈溢出之后,我对被接受的答案感到沮丧,所以我创建了一个POD来解决它!这是基于@rafaelsteil回答的想法,但它有一个更简单的接口,缓存加载的配置数据,并且它支持pods提供自己的默认值,这些默认值可以被主应用程序覆盖。我希望它能帮助别人。