[NSConcreteValue floatValue]:发送到实例的无法识别的选择器

[NSConcreteValue floatValue]: unrecognized selector sent to instance

在我的项目中我遇到了这个问题。

我有一个 NSDictionary,当我尝试调用一个值时,应用程序有时会崩溃并且 Xcode 给我这个错误:

下面是调用字典值的代码(值不是nil):

    float valueTest = [[change valueForKey:@"new"] floatValue];

编辑

这是我的 NSDictionary 的结构:

 {
    kind = 1;
    new = "0.02696711";
    old = "0.04064206";
}

字典永远不会等于 nil

方法是这样的:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
}

词典由系统创建。我用日志检查字典的内容,它已经正确并且已经是相同的格式。

我没有其他信息。

我正在寻找防止崩溃的方法。

抱歉可能出现英文错误

谢谢

好的,看来我们正在尝试观察 AVCaptureDevice 的 ISO 属性。似乎有时它作为 NSValue 到达,而不是键入为 NSNumber。我不知道为什么会这样,但你可以检查这个条件:

strcmp(@encode(float), [[change valueForKey:@"new"] objCType]) == 0

如果通过,您可以直接提取值:

float f;
[[change valueForKey:@"new"] getValue:&f];