问题
In a C# application I always used an app.config
file to save some data for my application to load when needed (e.g Connection String).
What is the best way to save information like this in an iOS application?
回答1:
You can create a property list file (there is a template for that in XCode, just to to File -> New file and choose there), so you will have something like "settings.plist", or anything like that. You can think of a plist as being a key => value config file, with the difference that you can also hold arrays and dictionaries, besides plain text as value.
Use NSBundle to load the file in your app, like
NSString *path = [[NSBundle mainBundle] pathForResource:@"settings" ofType:@"plist"];
NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:path];
You can then access your keys as a regular dictionary. Just don't forget to [release] it after ;).
回答2:
For small bits of data like a connection string, I'd use NSUserDefaults.
When you want to save your connection string, you'd do this:
[[NSUserDefaults standardUserDefaults] setObject:myConnectionString
forKey:@"connectionString"];
When you want to load it, you'd do this:
myConnectionString = [[NSUserDefaults standardUserDefaults]
stringForKey:@"connectionString"];
回答3:
If you're just storing a relatively simple set of configuration stuff, you can simply use NSDictionary's serialization methods (I don't know how to link to the methods directory in the class doc):
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];
Since I don't know how familiar you are with objective-c, I'll also note:
- In iOS, the home directory refers to the application's sandboxed directory.
- I recommend reading a little bit up on reference counting. Although objective-c, as of iOS5, now automatically reference counts for you, there are some edge cases to be aware about (Here's a SO question on ARC)
回答4:
In iOs every App has own sandbox which will be availble for that app only. So If you want that file to be read only access save it to Application Bundle. else save to Application folder.
you Can not access Application folder directly So If you want to save your file to that folder you have to do it programmatically.
回答5:
iOS Application Configuration File in Swift with iOS 8.3:
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)
回答6:
Updated for Swift 3 Xcode 8
Add a new property list to your project named "Sample.plist". Then see the following example.
let path: String = Bundle.main.path(forResource: "Sample", ofType: "plist")!
let sampleConf: NSDictionary = NSDictionary(contentsOfFile: path)!
print(sampleConf.object(forKey: "test") as! String)
回答7:
I use property lists for storing small pieces of data - have a look here on how to use them:
http://iphoneincubator.com/blog/tag/nspropertylistserialization
回答8:
I realize I'm late to the party, but after finding this stack overflow I was disheartened at the accepted answer, so I created a pod to solve it! This is based on the idea from @RafaelSteil's answer, but it has a simpler interface, caches the loaded config data, and it supports pods providing their own defaults which can be overridden by the main app. I hope it helps someone.
来源:https://stackoverflow.com/questions/8182026/ios-application-configuration-file