[NSConcreteValue floatValue]:发送到实例的无法识别的选择器
[NSConcreteValue floatValue]: unrecognized selector sent to instance
在我的项目中我遇到了这个问题。
我有一个 NSDictionary,当我尝试调用一个值时,应用程序有时会崩溃并且 Xcode 给我这个错误:
- [NSConcreteValue floatValue]: 无法识别的选择器发送到实例
下面是调用字典值的代码(值不是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];
在我的项目中我遇到了这个问题。
我有一个 NSDictionary,当我尝试调用一个值时,应用程序有时会崩溃并且 Xcode 给我这个错误:
- [NSConcreteValue floatValue]: 无法识别的选择器发送到实例
下面是调用字典值的代码(值不是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];