我正在关注[NSManagedObject valueForKeyPath:...]
,然后检查查询返回的结果,看看它是单个NSManagedObject还是受管对象的NSSet。如果它是NSSet,我试图使用[NSSet allObjects]
它没有像预期的那样返回NSSet成员的NSArray。
guids = [结果allObjects]
result
实际上是一个NSSet,但是它给了我一个包含NSSet的数组。
当我问数组中有多少个物体时,我得到'1'作为我的答案......
[guids count] //返回1
NSArray *guids;
id result = [someNSManagedObject valueForKeyPath:kvcPath];
if ([result isKindOfClass:[NSSet class]])
{
guids = [result allObjects];
}
即使用枚举器和NSMutableArray替换guids = [result allObjects]
也不起作用......
if ([result isKindOfClass:[NSSet class]])
{
NSEnumerator *setEnumerator = [result objectEnumerator];
NSString *value;
while (value = [setEnumerator nextObject]) {
[guids addObject:value];
}
}
看下面的图片(搞笑),调查员应该从集合中查看单个值,但是它会将整个集合视为值。
答案 0 :(得分:0)
在上面的评论中归功于 rmaddy ,结果证明这是NSSet中的NSSet。
将这两条路径对比后面的解释
someParentManObj.someRelatedChildManObj
与
someParentManObj.someRelatedChildManObj.someFieldOnChildManObj
显然,如果你只关注一个关系的NSManagedObject路径,而不是一个领域,那么你将会回来...... (1)关系的另一端是单个NSManagedObject,或者 (2)在关系的另一端有一个NSMan of NSManagedObjects。
但是,如果你调整路径使它以NSManagedObject上的字段名结尾,你就不会获得NSSet值,而是获得一个NSSet包装的NSSet。