NSPredicate具有子属性

时间:2014-02-24 11:50:22

标签: objective-c nspredicate subclassing

是否可以根据let say object.name创建NSPredicate进行过滤? (object是我想要过滤的对象的属性。)

编辑:通过过滤器,我的意思是我有一个首字母列表,当用户点击一个时,我想删除object.name以该首字母开头的所有引脚。

示例:我见过this question,其中接受的答案显示了如何使用NSPredicate和子类化过滤地图视图上的图钉。这几乎就是我想要的。

但在我的情况下,我有一个CustomPin类,它继承了MKAnnotation。我的自定义引脚有一个名为“object”的属性,它是类Friend,它继承了NSManagedObject。

现在我想按 pin.object.name 进行过滤。

额外:(如果由于这个部分不可能,那么我将为Friend和Pet创建一个超类,并使它们都是继承名称,但目前它没有这样做,所以我添加了这部分也是。)

为了使事情变得更加忙碌,对象可以是类Friend或Pet,它们都继承了NSManagedObject并具有属性“name”。

这是我的CustomPin类:

@interface CustomPin : NSObject <MKAnnotation, OCGrouping>

- (CustomPin *)initWithCoordinate:(CLLocationCoordinate2D)coordinate title:(NSString *)title subtitle:(NSString *)subtitle pinType:(NSNumber *)pinType;

@property (nonatomic) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *subtitle;
@property (nonatomic, strong) NSNumber *pinType;
@property (nonatomic, copy) NSString *groupTag;
@property (nonatomic, weak) NSManagedObject *object;

这是我的朋友班:

@property (nonatomic, retain) NSString * address;
@property (nonatomic, retain) NSNumber * latitude;
@property (nonatomic, retain) NSNumber * longitude;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * phone_no;
@property (nonatomic, retain) NSString * type;

这是我的Pet课程:

@property (nonatomic, retain) NSString * address;
@property (nonatomic, retain) NSNumber * latitude;
@property (nonatomic, retain) NSNumber * longitude;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * phone_no;

显然,班级名称仅用于举例。

2 个答案:

答案 0 :(得分:0)

    NSString *nameOfObject = @"some name";
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"object.name like %@", nameOfObject]; 
    // or "object.name == %@"

    NSArray *filteredArray = [arrayOfPins filteredArrayUsingPredicate:predicate];

More about using predicates with key-paths

答案 1 :(得分:0)

使用

NSArray *b = [yourArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"pin.object.name = %@", required_name]];