Как мне представить значение «нет» в NSUserDefaults? - PullRequest
2 голосов
/ 04 апреля 2011

Я сохраняю сочетания клавиш , представленные в виде NSDictionary экземпляров в пользовательских значениях по умолчанию, и возникли некоторые проблемы при представлении значений "none"Когда мое приложение запускается, я регистрирую несколько ярлыков по умолчанию.Затем пользователь может изменить сочетания клавиш в настройках приложения.Виджеты настроек клавиатуры связаны непосредственно с настройками пользователя по умолчанию.

Пользователь может нажать специальную кнопку «очистить», которая очищает сочетание клавиш, означающее, что пользователь не желает устанавливать ярлык для данной функции.Когда сочетание клавиш очищено, оно устанавливается на nil.Это проблема, потому что установка ярлыка на nil в пользовательских значениях по умолчанию возвращает значение, зарегистрированное для registerDefaults:.(Метод objectForKey: не находит заданный ключ в домене приложения и поэтому переходит в домен NSRegistrationDomain.)

Как мне представить «очищенные» сочетания клавиш, чтобы objectForKey: возвращал nil?Нужно ли играть в игры с пустыми NSDictionary экземплярами и другими значениями часового или есть лучший способ?

1 Ответ

2 голосов
/ 05 апреля 2011

В итоге я использовал этот преобразователь:

@interface NullTransformer : NSValueTransformer {}
@end

@implementation NullTransformer

+ (BOOL) allowsReverseTransformation {
    return YES;
}

- (id) transformedValue: (id) value {
    return [value count] ? value : nil;
}

- (id) reverseTransformedValue: (id) value {
    return value ? value : [NSDictionary dictionary];
}

@end

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

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