3

私はそのクラスを持っています:

@interface Field : NSObject
@property CGPoint fieldCoordinates;
@property CGPoint ballCoordinates;
@end

そして、私はこのクラスのオブジェクトの NSArray をフィルタしてみてください:

NSPredicate * y1 = [NSPredicate predicateWithFormat:@"ballCoordinates.y >= %@",location.y];
NSArray * filtered = [self.fieldsArray filteredArrayUsingPredicate:y1];

しかし、エラーが発生します:

キャッチされない例外 'NSUnknownKeyException' が原因でアプリを終了しています。理由: '[ valueForUndefinedKey:]: このクラスは、キー y のキー値コーディングに準拠していません。

NSPredicate は CGPoint によるフィルターに問題がありますか?

4

2 に答える 2

8

はい、これはであり、キー値に準拠した Objective-C クラスではないため、NSPredicateに問題があります。次のように、代わりにブロックを使用して述語を記述できます。CGPointstruct

NSPredicate * y1 = [NSPredicate predicateWithBlock: ^BOOL(id obj, NSDictionary *bind) {
    return ((CGPoint)[obj ballCoordinates]).y >= location.y;
}];
于 2013-04-07T21:22:38.423 に答える