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

时间:2014-07-06 16:36:42

标签: objective-c

      _data = [NSMutableArray new];
    NSNumber *value1 = [NSNumber numberWithFloat: 5.0f];
    [_data setValue:value1 forKey:@"foothold"];
    NSNumber *value2 = [_data valueForKey:@"foothold"];
    NSLog(@"a foothold  %f ",[value2 floatValue]);//error here

很奇怪,但我没有看到我的错误......

2 个答案:

答案 0 :(得分:3)

当您收到“无法识别的选择器发送到实例”错误时,您将获得您尝试调用的方法的名称(在本例中为floatValue)以及您的对象类型在这里调用它(NSArray。)

因此,在这种情况下,尽管value2被声明为NSNumber,但[_data valueForKey:@"foothold"];返回的值为NSArray,但不响应{{1}选择器。

我很惊讶你没有得到其他警告。鉴于语法,看起来您应该使用floatValue而不是数组。在这种情况下,试试这个:

NSMutableDictionary

答案 1 :(得分:3)

你有一些问题。

  1. _data错误地是NSMutableArray而不是NSMutableDictionary
  2. 请勿使用setValue:forKey:valueForKey:,除非您的意思是做KVC。
  3. 使用现代语法(更简单,避免问题#2)。
  4. 更新的代码:

    _data = [NSMutableDictionary dictionary];
    NSNumber *value1 = @5.0;
    _data[@"foothold"] = value1;
    NSNumber *value2 = _data[@"foothold"];
    NSLog(@"a foothold  %f ",[value2 floatValue]);