Как сохранить состояние UISegmentedControle в NSUserdefaults

Проблема заключается в том, что de selectedSegmentIndex не выбран: «UISegmentedControlNoSegment» псевдоним «-1».

Остальные состояния (0, 1, 2 и т. Д.) Я могу сохранить как целые числа и получить с помощью

carTypeSegmentedControl.selectedSegmentIndex = [defaults integerForKey:@"typeOfCar"];

Но -1 - это не NSInteger.

Я также попытался удалить целое число из NSUserdefaults, но запрос вернул бы «0», что неприемлемо.

Итак, есть ли другой простой способ?


person Chrizzz    schedule 12.04.2010    source источник


Ответы (3)


-1 - целое число, это целое отрицательное число. Вы должны иметь возможность сохранить это в NSUserDefaults.

person Ben Gottlieb    schedule 12.04.2010
comment
То же. Возможно, OP путает NSInteger с NSUInteger? - person Amagrammer; 13.04.2010
comment
Если -1 извлекается как unsigned int, OP может сообщить о возвращении MAX_INT. - person Alex Reynolds; 13.04.2010

Вам необходимо использовать NSNumber, который является объектным представлением значений общих числовых и логических типов, например. устанавливать:

[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:-1] forKey:kDefaultCarSegmentedControlState];

Чтобы получить:

NSInteger defaultCarSegmentedControlSelectedIndex = [[[NSUserDefaults standardUserDefaults] objectForKey:kDefaultCarSegmentedControlState] intValue];
person Alex Reynolds    schedule 12.04.2010

Ты прав, Бен, -1 - не целое число. И это все-таки хранится. Я сделал NSLog по этому поводу. Глупо, я этого не пробовал. Я не нашел четкой документации по этому поводу.

Так что, наверное, моя проблема где-то в els.

Думаю, твой ответ тоже работает, Алекс.

Спасибо за помощь

person Chrizzz    schedule 13.04.2010