Как сохранить пользовательские настройки для моего приложения для iPhone?

Название вопроса в значительной степени выдает его - я бы хотел, чтобы мое приложение запомнило несколько вещей. Это своего рода калькулятор, поэтому он должен сохранять последние использованные значения и некоторые пользовательские настройки.

В основном я хотел бы сохранить несколько чисел с плавающей запятой и BOOL и загрузить их снова при следующей загрузке приложения.

Какой самый лучший и простой способ сделать это?

Спасибо !!

47
задан Suragch 28 March 2016 в 06:05
поделиться

3 ответа

Одним из самых простых способов было бы сохранить его в 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: в вашем случае.

131
ответ дан 26 November 2019 в 19:16
поделиться

Вы ищете NSUserDefaults

2
ответ дан 26 November 2019 в 19:16
поделиться

Помимо очень хорошего подхода 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 очень удобен.

7
ответ дан 26 November 2019 в 19:16
поделиться