Преобразование строки KVC не работает для значения BOOL - PullRequest
3 голосов
/ 08 сентября 2010

Эй.Я читаю строку из файла и пытаюсь использовать полученную строку для установки свойства BOOL для объекта с помощью метода KVC -setValue:forKeyPath:.Однако это нарушается с исключением: -[NSCFString charValue]: unrecognized selector sent to instance 0x7fff711023b0.Я предполагаю, что это потому, что BOOL typedef'd из char.Это можно обойти?Спасибо!

Ответы [ 3 ]

3 голосов
/ 08 сентября 2010

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

    @try
    {
        [(NSObject*)retObj setValue:[[obj keyValuePairs] objectForKey:key]
                         forKeyPath:key];
    }
    @catch (NSException * e)
    {
        if ([[e name] isEqualToString:NSInvalidArgumentException])
        {
            NSNumber* boolVal = [NSNumber numberWithBool:[[[obj keyValuePairs] objectForKey:key] boolValue]];
            [(NSObject*)retObj setValue:boolVal
                             forKeyPath:key];
        }
    }

Спасибо в любом случае!

3 голосов
/ 08 сентября 2010

При установке свойства BOOL с помощью KVC вам необходимо передать объект NSNumber.Что вы могли бы сделать в вашем случае, это пропуск [NSNumber numberWithBool:[myString boolValue]].Это должно исправить твое падение.

0 голосов
/ 11 марта 2016

Добавьте в свой проект простую категорию:

@implementation NSString (CharValue)

- (BOOL)charValue {
    return [self isEqualToString:@"0"] ? NO : YES;
}

@end
...