我有一个应用程序使用核心数据有一个我想分组的关系。我有我的.xcdatamodel文件生成NSManagedObject类,并且大部分似乎一切正常。核心数据/可可:@distinctUnionOfObjects不返回一个可用的NSArray *
给定一个父/子关系,我想做到以下几点:
家长有孩子的集合。孩子们有一个属性,groupByProperty,我想分组。
下面的代码:
NSSet *allChildren = parent.children;
NSArray *groups = [allChildren valueForKeyPath:@"@distinctUnionOfObjects.groupByProperty"];
Child *child = [groups objectAtIndex:x]; //x is the row that I would like to retrieve
产生尝试设置子指针时NSInvalidArgumentException。
然而,当我这样做:
NSSet *allChildren = parent.children;
NSArray *groups = [[NSArray alloc] initWithArray:[allChildren valueForKeyPath:@"@distinctUnionOfObjects.groupByProperty"]];
Child *child = [groups objectAtIndex:x]; //x is the row that I would like to retrieve
一切工作正常。
任何人都可以解释这种行为吗?我正在努力弄清楚这是如何工作的。
预先感谢任何帮助,您可以提供...
克里斯
你所展示的代码是没有什么不同的,只不过你泄露了你在第二个例子中分开的数组(因为你不会发送一个释放消息,至少我们可以看到) 。请编辑您的问题以包含打印到调试器控制台的完整例外消息。 – 2009-11-09 14:15:50
这是错误。看起来好像从valueForKeyPath返回的对象实际上不是一个NSArray。这很奇怪,因为initWithArray:需要一个NSArray *传递给它......这很奇怪!由于未捕获的异常'NSInvalidArgumentException',原因:'*** - [NSCFSet objectAtIndex:]:无法识别的选择器发送到实例0x3a3ff60' – 2009-11-09 19:25:43
***终止应用程序此外,彼得,我在代码中进一步发布组。为了简单起见,我只是做了这个片段来显示造成这次事故的原因。 – 2009-11-09 19:27:08