Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在NSArray上使用valueForKeyPath,如果属性设置为YES,如何计算布尔属性_Objective C_Cocoa - Fatal编程技术网

Objective c 在NSArray上使用valueForKeyPath,如果属性设置为YES,如何计算布尔属性

Objective c 在NSArray上使用valueForKeyPath,如果属性设置为YES,如何计算布尔属性,objective-c,cocoa,Objective C,Cocoa,我有一个名为allQuestions的NSArray,其中的对象具有一个名为isCorrect的布尔属性 我试过了 int res = [self.allQuestions valueForKeyPath:@"@sum.isCorrect"]; 但这总是给我一个假数字。我想“是”算作1,“否”算作0。我错过了什么。这些价值没有保证吗?如果没有,那么在不迭代数组的情况下实现这个简单任务的最佳方法是什么 编辑:准确地说:我对计算结果为“是”的元素的计数(数量)感兴趣。在添加到数组时,应将布尔值包装

我有一个名为allQuestions的NSArray,其中的对象具有一个名为isCorrect的布尔属性

我试过了

int res = [self.allQuestions valueForKeyPath:@"@sum.isCorrect"];
但这总是给我一个假数字。我想“是”算作1,“否”算作0。我错过了什么。这些价值没有保证吗?如果没有,那么在不迭代数组的情况下实现这个简单任务的最佳方法是什么


编辑:准确地说:我对计算结果为“是”的元素的计数(数量)感兴趣。

在添加到数组时,应将布尔值包装在NSNumber中:

BOOL b = YES;

[self.allQuestions addObject:[NSNumber numberWithBool:b]]; 
并以相同的方式检索:

 BOOL b = [[self.allQuestions valueForKeyPath:@"@sum.isCorrect"] boolValue];
valueForKeyPath返回NSNumber的对象。您需要将其转换为基本类型int或在NSNumber处使用指针。

已解决:

    NSNumber * res = [self.allQuestions valueForKeyPath:@"@sum.isCorrect"];

它返回一个NSNumber,当然…

我在问题的标题中说:“如何计数”,即我想知道一个数字,比如55[问题是正确的]在我编辑答案后您编辑了问题。只要使用for循环来解析所有数组项,任何时候只要得到bool YES(使用我上面写的代码),就可以得到一个整数+1。我认为这很简单。这是一种显而易见的方法,我同意,但我很好奇为什么我的建议不起作用,它显然调用了所有isCorrect属性,因为当它执行时我可以看到它,但接下来呢?总结一下要点?而且似乎几乎没有关于关键路径如何工作以及它们提供什么的文档。。。我在这里用了一个简单的例子,但我有更大的想法;我喜欢像LINQ这样的东西,我想我可以使用基本内容的键路径来保持代码更简洁,但是,唉……因为res是一个Int,Bool值应该保存为nsarray中的NSNumber。该行至少会引起编译器警告。解决了,@sum似乎可以工作,但返回NSNumber。事后看来:显而易见
    NSNumber * res = [self.allQuestions valueForKeyPath:@"@sum.isCorrect"];