3

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

4

3 回答 3

3

使用 KVC设置BOOL属性时,需要传递一个NSNumber对象。在你的情况下你可以做的是 pass [NSNumber numberWithBool:[myString boolValue]]。那应该可以解决您的崩溃问题。

于 2010-09-07T22:37:43.173 回答
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];
        }
    }

不管怎么说,还是要谢谢你!

于 2010-09-08T01:12:44.767 回答
1

为您的项目添加一个简单的类别:

@implementation NSString (CharValue)

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

@end
于 2016-03-11T12:42:18.003 回答