В приложении С# я всегда использовал файл app.config
для сохранения некоторых данных для загрузки приложения при необходимости (например, Connection String).
Каков наилучший способ сохранить такую информацию в приложении iOS?
В приложении С# я всегда использовал файл app.config
для сохранения некоторых данных для загрузки приложения при необходимости (например, Connection String).
Каков наилучший способ сохранить такую информацию в приложении iOS?
Вы можете создать файл списка свойств (в XCode есть шаблон, только для File → New file и выберите там), поэтому у вас будет что-то вроде "settings.plist" или что-то в этом роде. Вы можете думать, что plist является файлом конфигурации key = > value, с той разницей, что вы также можете хранить массивы и словари, помимо обычного текста как значения.
Используйте NSBundle для загрузки файла в ваше приложение, например
NSString *path = [[NSBundle mainBundle] pathForResource:@"settings" ofType:@"plist"];
NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:path];
Затем вы можете получить доступ к своим ключам в качестве обычного словаря. Просто не забудьте [освободить] его после;).
Для небольших битов данных, таких как строка подключения, я бы использовал NSUserDefaults.
Если вы хотите сохранить строку подключения, вы должны сделать следующее:
[[NSUserDefaults standardUserDefaults] setObject:myConnectionString
forKey:@"connectionString"];
Если вы хотите загрузить его, вы должны сделать это:
myConnectionString = [[NSUserDefaults standardUserDefaults]
stringForKey:@"connectionString"];
Если вы просто сохраняете относительно простой набор элементов конфигурации, вы можете просто использовать NSDictionary методы сериализации (я не знаю, t знать, как ссылаться на каталог методов в классе 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];
Поскольку я не знаю, насколько вы знакомы с objective-c, я также отмечу:
В iOs каждое приложение имеет собственную песочницу, которая будет доступна только для этого приложения. Итак, если вы хотите, чтобы этот файл был доступен только для чтения, сохраните его в Application Bundle. иначе сохраните папку приложения.
Вы не можете получить доступ к папке приложения напрямую. Поэтому, если вы хотите сохранить файл в этой папке, вам нужно сделать это программно.
Файл конфигурации приложения iOS в Swift с 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)
Я использую списки свойств для хранения небольших фрагментов данных - посмотрите здесь, как их использовать:
http://iphoneincubator.com/blog/tag/nspropertylistserialization
Я понимаю, что опаздываю на вечеринку, но после обнаружения этого я был разочарован принятым ответом, поэтому я создал pod решить это! Это основано на идее @RafaelSteil answer, но имеет более простой интерфейс, кэширует загруженные данные конфигурации и поддерживает контейнеры, предоставляющие свои собственные значения по умолчанию, которые можно переопределить по основному приложению. Надеюсь, это поможет кому-то.
Обновлено для 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)