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