Доступ к NSUserDefault из нескольких представлений - PullRequest
1 голос
/ 02 июня 2011

Я пытаюсь получить доступ к NSUserDefault с именем prefs из нескольких представлений. Я выделяю префы в одном представлении, но я не знаю, как получить к ним доступ, просто не перераспределяя новый NSUserDefault во втором представлении.

Также у меня установлена ​​операционная система ios.

Вот моя функция FlipSideViewController:

Функция в моем FlipSideViewController: 'NSUserDefaults * prefs = [NSUserDefaults standardUserDefaults];

- (IBAction) changeRate:(id)sender {

if (rate.selectedSegmentIndex == 1){
    [prefs setInteger:1 forKey:@"myRate"];//save

}
else if (rate.selectedSegmentIndex == 2){
    [prefs setInteger:2 forKey:@"myRate"];//save
}
[[NSUserDefaults standardUserDefaults] synchronize];
};

И это функция MainViewController:

 NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
// [prefs setValue: @"0" forKey: @"myRate"];

if (!([prefs valueForKey: @"myRate"])){
    [prefs setInteger:0 forKey: @"myRate"];
}

[prefs setInteger:2 forKey: @"myRate"];

int rateOption = [[prefs valueForKey: @"myRate"] intValue];

if (rateOption == 1)
{
    dayOrHourly.text = @"% of Day:";
    percentOrHours.hidden = YES;
    hours.hidden = YES;
    dayPercentage.hidden = NO;
}
else if (rateOption == 2)
{
    dayOrHourly.text = @"# of Hours:";
    percentOrHours.hidden = NO;
    dayPercentage.hidden = YES;
}

Ответы [ 2 ]

4 голосов
/ 02 июня 2011

Наличие более одного префа для разных представлений не должно быть проблемой.Просто позвоните

[prefObject synchronize];

, когда вы измените один из экземпляров NSUserDefaults в одном представлении или попробуйте получить к ним доступ из другого представления, и все будет в порядке.

Но если вы действительно хотитеоставьте один объект общим для всех ваших контроллеров представления, поместите его в свой делегат приложения.[Я должен сказать, я не вижу смысла ...]

3 голосов
/ 11 июня 2011

NSUserDefaults - класс синглтона.Вы не распределяете экземпляры этого, вы получаете к нему доступ.

Тем не менее, вы пытались использовать objectForKey вместо valueForKey?Значения не могут возвращать значения, (... valueForKey] intValue];), тогда как объекты действительно возвращают значения.

Кроме того, вот как я это сделаю.

Во-первых, я бы определил константу в глобальном заголовке, например, так:

#define kSettings [NSUserDefaults standardUSerDefaults];

Затем у вас должен быть просто прекрасный доступ к NSUserDefaults между представлениями:

[kSettings setObject:@"This is a test." forKey:@"TestString"];

чтобы прочитать строку, вы должны сделать следующее:

[kSettings objectForKey:@"TestString"];

Я предлагаю определить некоторые "глобальные константы" для доступа к объектам, хранящимся в NSUserDefaults.Например:

#define kTestString [kSettings objectForKey:@"TestString"];
...