问题 什么是NSConcreteValue,如何提取其值?


我有一个库,我接收NSConcreteValue,我不知道如何处理它。我知道我应该得到的对象是一个布尔值,那么我如何解除真正的价值呢?


5161
2018-01-06 14:29


起源

你怎么知道你得到NSConcreteValue?根据这个链接 lists.apple.com/archives/cocoa-dev/2003/Oct/msg00096.html 这可能是NSValue类的私有子类。尝试检查(如链接中所述)。还尝试记录NSLog(@“%s”,[yourConcreteValue objCType])以查看该对象中存储的确切类型 - Vladimir


答案:


这是一个私人课程,有时(或所有时间?)在你工作的幕后使用 NSValue。或者至少那是我的印象。我认为你应该能够施展 NSValue

// assuming value is of type “id”
NSAssert([value isKindOfClass:[NSValue class]],
    @"Sorry, I was wrong. Maybe try anyway?");
NSAssert(strcmp(@encode(BOOL), [value objCType]) == 0,
    @"The value does not seem to hold a BOOL.");
BOOL unwrappedValue;
[value getValue:&unwrappedValue];

...或类似的东西,我正在做这件事:-)


12
2018-01-06 14:45



使用NSAssert验证类和值类型的+1个很好的例子。 (虽然可能没有必要进行演员表演 NSValue  - 只是使用 -getValue:) - David Gelhar
你是对的,我敢肯定他没有得到这个价值 NSConcreteValue。他更有可能得到一个 id 从一个集合或其他东西,我会编辑答案。 - zoul