Objective c 为什么valueForKeyPath抛出NSInvalidArgumentException?

Objective c 为什么valueForKeyPath抛出NSInvalidArgumentException?,objective-c,core-data,kvc,Objective C,Core Data,Kvc,我正在调试其他人的代码,所以这就是我在不知道代码的情况下达到这一点的原因 valueForKeyPath正在抛出NSInvalidArgumentException并在给定以下代码的情况下崩溃我的应用程序: NSMutableSet *cars = self.allCars; //assume allCars is already initialized and contains at least one car. NSString *key = @"make"; NSString *disti

我正在调试其他人的代码,所以这就是我在不知道代码的情况下达到这一点的原因

valueForKeyPath正在抛出NSInvalidArgumentException并在给定以下代码的情况下崩溃我的应用程序:

NSMutableSet *cars = self.allCars; //assume allCars is already initialized and contains at least one car.
NSString *key = @"make";
NSString *distinctUnionOfObjects = [NSString stringWithFormat:@"@distinctUnionOfObjects.%@",key];
NSArray *makeArray = [cars valueForKeyPath:distinctUnionOfObjects];
我注意到这里提到了@distinctUnionOfObjects操作符:

如果任何叶对象为nil,此运算符将引发异常


那么,在我的具体示例中,叶对象是什么?如何跟踪哪个叶具体为nil?

它基本上意味着集合中的某个对象,如果发送
make
消息(在本例中),则不返回任何内容(
nil
)。老实说,这个由苹果提供的特定操作符并没有以最健壮的方式实现,您最好编写自己的类似助手例程,在接受
nil
值等的同时进行过滤。