KVC string conversion not working for BOOL value

前端 未结 3 363
我寻月下人不归
我寻月下人不归 2021-01-01 06:03

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:

相关标签:
3条回答
  • 2021-01-01 06:43

    Add a simple category to your project:

    @implementation NSString (CharValue)
    
    - (BOOL)charValue {
        return [self isEqualToString:@"0"] ? NO : YES;
    }
    
    @end
    
    0 讨论(0)
  • 2021-01-01 06:49

    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.

    0 讨论(0)
  • 2021-01-01 06:57

    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!

    0 讨论(0)
提交回复
热议问题