KVC字符串转换不适用于BOOL值

时间:2010-09-07 22:35:54

标签: objective-c key-value-coding

嘿。我正在读取文件中的字符串并尝试使用结果字符串使用KVC方法-setValue:forKeyPath:在对象上设置BOOL属性。但是,这有一个例外:-[NSCFString charValue]: unrecognized selector sent to instance 0x7fff711023b0。我猜这是因为BOOL是来自char的typedef。有没有解决的办法?谢谢!

3 个答案:

答案 0 :(得分:3)

使用KVC设置BOOL属性时,需要传递NSNumber个对象。你可以做的就是通过[NSNumber numberWithBool:[myString boolValue]]。这应该可以解决你的崩溃问题。

答案 1 :(得分:3)

我正在捕获异常,检查它的名称,然后在需要时使用包装值重试。这是代码:

    @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];
        }
    }

非常感谢!

答案 2 :(得分:0)

在项目中添加一个简单的类别:

@implementation NSString (CharValue)

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

@end