2010-09-07 19 views
3

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

回答

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

无论如何,谢谢!

+0

好办法处理案件! – Ananth 2013-08-06 07:51:30

3

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

+0

除了我没有保证什么,我试图访问是一个布尔值的方式。你认为捕获异常然后重新尝试使用包装版本是合理的吗? – Grimless 2010-09-07 22:54:53

0

添加简单分类到项目:

@implementation NSString (CharValue) 

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

@end 
相关问题