Название вопроса в значительной степени выдает его - я бы хотел, чтобы мое приложение запомнило несколько вещей. Это своего рода калькулятор, поэтому он должен сохранять последние использованные значения и некоторые пользовательские настройки.
В основном я хотел бы сохранить несколько чисел с плавающей запятой и BOOL и загрузить их снова при следующей загрузке приложения.
Какой самый лучший и простой способ сделать это?
Спасибо !!
Одним из самых простых способов было бы сохранить его в NSUserDefaults
:
Setting:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:value
forKey:key];
// – setBool:forKey:
// – setFloat:forKey:
// in your case
[userDefaults synchronize];
Получение:
[[NSUserDefaults standardUserDefaults] objectForKey:key];
– boolForKey:
и
– floatForKey:
в вашем случае.
Помимо очень хорошего подхода NSUserDefaults, есть еще один простой способ сохранить данные из NSArray, NSDictionary или NSData в файле. Вы также можете использовать эти методы:
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag
соответственно (для NSDictionary):
+ (id)dictionaryWithContentsOfFile:(NSString *)path
вам просто нужно указать правильный путь к местоположению. Согласно Руководству по программированию приложений для iOS, каталог /Library/Caches будет лучшим местом для хранения данных, которые вам необходимо сохранять между запусками приложения. (см. здесь)
Для того, чтобы сохранить/загрузить словарь из поля под названием «менеджеры» в каталоге вашего документа, вы можете использовать эти методы:
-(void) loadDictionary {
//get the documents directory:
NSArray *paths = NSSearchPathForDirectoriesInDomains (NSCachesDirectory, NSUserDomainMask, YES);
NSString *cacheDirectory = [paths objectAtIndex:0];
//create a destination file name to write the data :
NSString *fullFileName = [NSString stringWithFormat:@"%@/managers", cacheDirectory];
NSDictionary* panelLibraryContent = [NSDictionary dictionaryWithContentsOfFile:fullFileName];
if (panelLibraryContent != nil) {
// load was successful do something with the data...
} else {
// error while loading the file
}
}
-(void) storeDictionary:(NSDictionary*) dictionaryToStore {
//get the documents directory:
NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cacheDirectory = [paths objectAtIndex:0];
//make a file name to write the data to using the
//cache directory:
NSString *fullFileName = [NSString stringWithFormat:@"%@/managers", cacheDirectory];
if (dictionaryToStore != nil) {
[dictionaryToStore writeToFile:fullFileName atomically:YES];
}
}
В любом случае этот подход очень ограничен, и у вас есть тратить много дополнительной работы, если вы хотите хранить более сложные данные. В этом случае CoreData API очень удобен.