由CGPoint NSPredicate过滤器类

net*_*jor 3 objective-c nspredicate cgpoint

我有那个班:

@interface Field : NSObject
@property CGPoint fieldCoordinates;
@property CGPoint ballCoordinates;
@end
Run Code Online (Sandbox Code Playgroud)

我尝试过滤此类对象的NSArray:

NSPredicate * y1 = [NSPredicate predicateWithFormat:@"ballCoordinates.y >= %@",location.y];
NSArray * filtered = [self.fieldsArray filteredArrayUsingPredicate:y1];
Run Code Online (Sandbox Code Playgroud)

但得到错误:

由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[valueForUndefinedKey:]:此类不是密钥y的密钥值编码兼容.

NSPredicate有CGPoint过滤器的问题吗?

das*_*ght 8

是的,NSPredicate有问题CGPoint,因为它是一个struct,而不是符合键值的Objective-C类.您可以使用块编写谓词,如下所示:

NSPredicate * y1 = [NSPredicate predicateWithBlock: ^BOOL(id obj, NSDictionary *bind) {
    return ((CGPoint)[obj ballCoordinates]).y >= location.y;
}];
Run Code Online (Sandbox Code Playgroud)