Как сохранить пользовательские настройки для моего приложения для iPhone? - PullRequest
45 голосов
/ 25 августа 2010

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

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

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

Спасибо !!

Ответы [ 5 ]

129 голосов
/ 25 августа 2010

Одним из самых простых способов было бы сохранить его в NSUserDefaults:

Настройка:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

[userDefaults setObject:value 
                 forKey:key];
// – setBool:forKey:
// – setFloat:forKey:  
// in your case 
[userDefaults synchronize];

Получение:

[[NSUserDefaults standardUserDefaults] objectForKey:key];

– boolForKey:

и

– floatForKey: в вашем случае.

6 голосов
/ 25 августа 2010

Помимо очень хорошего подхода 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];
    }
} 

В любом случае, этот подход очень ограничен, и вам придется потратить много дополнительной работы, если вы хотите хранить более сложные данные. В этом случае API CoreData очень удобен.

5 голосов
/ 18 сентября 2015

В Свифт:

Настройка

let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setObject(value, forKey: key)

// userDefaults.setFloat(12.34, forKey: "myFloatKey")
// userDefaults.setBool(true, forKey: "myBoolKey")

Обратите внимание, что для iOS 8 и более поздних версий вызов userDefaults.synchronize() является , не рекомендуется .

Получение

let userDefaults = NSUserDefaults.standardUserDefaults()
if let value = userDefaults.objectForKey(key) {
    print(value)
}

Обратите внимание, что userDefaults.boolForKey и userDefaults.floatForKey оба возвращают необязательные значения, поэтому они никогда не будут nil (только false или 0.0).

Дальнейшее чтение

2 голосов
/ 25 августа 2010

Вы ищете NSUserDefaults

0 голосов
/ 10 октября 2017

Swift 4 / Linux

Очевидно, что-то изменилось.Теперь есть класс UserDefault.Проверьте эти ссылки:

https://developer.apple.com/documentation/foundation/userdefaults

https://www.hackingwithswift.com/read/12/2/reading-and-writing-basics-userdefaults

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...