对二进制表达式的操作无效(' float'和' id')

时间:2017-01-12 01:45:39

标签: objective-c

我收到此错误

  

对二进制表达式的无效操作(' float'和' id')

NSMutableArray *redValues = [NSMutableArray array];
NSUInteger *redValuesLength = [redValues count];    
NSMutableArray *arrayOne = [NSMutableArray array];
NSInteger j;
float diffForAverage, totalOne;
__block int counter = 0;
float average = totalOne / amount;
int amount = 1;

for (j = (counter + 25); j < (redValuesLength - 25); j++)
{
    diffForAverage = average - redValues[j + 1]; // error occurs here

    if (diffForAverage > -1 && diffForAverage < 1)
    {
        totalOne += redValues[j + 1]; // error occurs here
        amount++;
        [arrayOne addObject:[NSNumber numberWithInt:(j - 25)]];
        counter++;
    }
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

发布问题时请不要重新输入错误消息(或代码)。 复制并粘贴。否则你会犯错误。您可以从问题导航器中复制Xcode错误消息。默认快捷方式:⌘4

实际的错误消息是

  

二进制表达式的无效操作数('float'和'id')

问题是redValuesNSMutableArray,因此其元素是对象(如NSObject),而非原始数字(如floatint )。 id类型是“对象标识”,可以引用任何Objective-C对象,甚至是那些不是NSObject实例的(非常罕见的)对象。

您无法将float添加到对象引用,也无法在NSMutableArray中存储原始数字。

您已经了解了NSNumber包装器对象,因为您稍后会在代码中创建一个。您需要在NSNumber中存储redValues个实例。也许你已经这样做了。然后,当您从NSNumber返回redValues时,您需要将其转回float进行数学运算,如下所示:

diffForAverage = average - [redValues[j + 1] floatValue]; // error occurs here

如果您声明NSMutableArray喜欢

NSMutableArray<NSNumber *> *redValues = [NSMutableArray array];

然后编译器知道每个元素都是NSNumber,你可以使用点语法(有些人喜欢),如

diffForAverage = average - redValues[j + 1].floatValue; // error occurs here