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

发布于 2024-09-17 18:25:29 字数 209 浏览 7 评论 0原文

嘿。我正在从文件中读取字符串,并尝试使用 KVC 方法 -setValue:forKeyPath: 使用生成的字符串在对象上设置 BOOL 属性。但是,这会出现异常:-[NSCFString charValue]:无法识别的选择器发送到实例 0x7fff711023b0。我猜这是因为 BOOL 是从 char 类型定义的。有办法解决这个问题吗?谢谢!

Hey. I am reading in a string from a file and attempting to use the resulting string to set a BOOL property on an object using the KVC method -setValue:forKeyPath:. However, this breaks with an exception: -[NSCFString charValue]: unrecognized selector sent to instance 0x7fff711023b0. I'm guessing this is because BOOL is typedef'd from char. Is there a way around this? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

星光不落少年眉 2024-09-24 18:25:29

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

When setting a BOOL property using KVC, you need to pass an NSNumber object. What you could do in your case is pass [NSNumber numberWithBool:[myString boolValue]]. That should fix your crash.

终止放荡 2024-09-24 18:25:29

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

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

无论如何,谢谢!

I am catching the exception, checking it's name, and then retrying with a wrapped value when needed. Here is the code:

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

Thanks anyway!

羁拥 2024-09-24 18:25:29

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

@implementation NSString (CharValue)

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

@end

Add a simple category to your project:

@implementation NSString (CharValue)

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

@end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文