Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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 谓词求和子项';s值_Objective C_Cocoa_Core Data - Fatal编程技术网

Objective c 谓词求和子项';s值

Objective c 谓词求和子项';s值,objective-c,cocoa,core-data,Objective C,Cocoa,Core Data,我试图通过以下方式获得整个公司的总工资: NSNumber *totalSalary = [company valueForKeyPath:@"departments.employees.@sum.salary"]; 但我一直收到这个错误,“-[\uu NSSet0 decimalValue]:发送到实例0x10031eb00的无法识别的选择器” 我认为我做错了什么,但我不确定在哪里。您似乎正在遍历多个集合(所有部门的集合以及这些部门的员工的集合)。在对它们求和之前,您需要将它们合并到一个容

我试图通过以下方式获得整个公司的总工资:

NSNumber *totalSalary  = [company valueForKeyPath:@"departments.employees.@sum.salary"];
但我一直收到这个错误,“-[\uu NSSet0 decimalValue]:发送到实例0x10031eb00的无法识别的选择器”


我认为我做错了什么,但我不确定在哪里。

您似乎正在遍历多个集合(所有部门的集合以及这些部门的员工的集合)。在对它们求和之前,您需要将它们合并到一个容器中(所有员工)

查看@unionOf。。。在此处设置和数组运算符:

我没有试过,但我认为,@unionOfSets.employees.@sum.salary是正确的方法。如果不是这样,请告诉我

更新:巴里·沃克击败了我。:-)他是对的,这是不同的集合的联合,否则,你会在一个员工属于多个部门的地方得到重复的员工。虽然我不认为有必要分两步进行:


@“departments.@distinctUnionOfSets.employees.@sum.salary”应该这样做。

您似乎正在遍历多个集合(所有部门的集合以及这些部门的员工的集合)。在对它们求和之前,您需要将它们合并到一个容器中(所有员工)

查看@unionOf。。。在此处设置和数组运算符:

我没有试过,但我认为,@unionOfSets.employees.@sum.salary是正确的方法。如果不是这样,请告诉我

更新:巴里·沃克击败了我。:-)他是对的,这是不同的集合的联合,否则,你会在一个员工属于多个部门的地方得到重复的员工。虽然我不认为有必要分两步进行:


@“部门@distinctUnionOfSets.employees.@sum.salary”应该这样做。

不要害怕。尽管KVC中的set和array操作符非常强大,但我发现自己几乎每次在这样复杂的关键路径中使用它们时都必须参考文档。因为
valueForKeyPath:
是一个方法,所以可以从调试器控制台调用它。我经常发现,要获得正确的密钥路径,需要在KVC调用之前设置一个断点,并在调试器控制台中尝试一些东西。Python和PyObjC(从10.5开始就包含在OSX中)也是测试/调试KVC键路径的一个很好的交互环境。在这个特殊的例子中

@sum
[company valueForKeyPath:@“departments.employees”]
返回的每个项目发送
-[NSNumber decimalValue]
消息(键值编码语言中的“接收数组”)。因此,它期望接收数组中的每个项都是一个
NSNumber
。我怀疑
company.departments
是一个集合,因此
[company valueForKeyPath:@“departments.employees”]
是一组集合,而不是
nsnumber
的集合。我相信您希望创建一个包含所有员工的“扁平”集合,然后您可以从中计算总和:

id allEmployees = [company valueForKeyPath:@"departments.@distinctUnionOfSets.employees"];
NSNumber *totalSalary = [allEmployees valueForKeyPath:@"@sum.salary"];
假设每个员工都只在一个部门工作,下面的方法似乎也适用

NSNumber *totalSalary = [company valueForKeyPath:@"departments.@sum.employees.@sum.salary"];

不要害怕。尽管KVC中的set和array操作符非常强大,但我发现自己几乎每次在这样复杂的关键路径中使用它们时都必须参考文档。因为
valueForKeyPath:
是一个方法,所以可以从调试器控制台调用它。我经常发现,要获得正确的密钥路径,需要在KVC调用之前设置一个断点,并在调试器控制台中尝试一些东西。Python和PyObjC(从10.5开始就包含在OSX中)也是测试/调试KVC键路径的一个很好的交互环境。在这个特殊的例子中

@sum
[company valueForKeyPath:@“departments.employees”]
返回的每个项目发送
-[NSNumber decimalValue]
消息(键值编码语言中的“接收数组”)。因此,它期望接收数组中的每个项都是一个
NSNumber
。我怀疑
company.departments
是一个集合,因此
[company valueForKeyPath:@“departments.employees”]
是一组集合,而不是
nsnumber
的集合。我相信您希望创建一个包含所有员工的“扁平”集合,然后您可以从中计算总和:

id allEmployees = [company valueForKeyPath:@"departments.@distinctUnionOfSets.employees"];
NSNumber *totalSalary = [allEmployees valueForKeyPath:@"@sum.salary"];
假设每个员工都只在一个部门工作,下面的方法似乎也适用

NSNumber *totalSalary = [company valueForKeyPath:@"departments.@sum.employees.@sum.salary"];

我认为@“departments@distinctUnionOfSets.employees.@sum.salary”不起作用。employees.@sum.salary不是一个集合,所以你不能接受所有这些集合的联合。我认为@departments.@distinctUnionOfSets.employees.@sum.salary”不起作用。employees.@sum.salary不是一个集合,所以不能将所有这些集合合并。嗯,我不知道我们可以交互使用调试器,我一直认为如果我们需要,我们可以使用Ruby Cocoa或PyObjC。但是谢谢!嗯,我不知道我们可以交互地使用调试器,我一直认为如果我们想要,我们可以使用Ruby Cocoa或PyObjC。但是谢谢!