2014-02-24 82 views
-1

是否可以創建NSPredicate以基於let說object.name來過濾? (對象是我想要過濾的對象的屬性)。具有子屬性的NSPredicate

編輯:通過過濾器,我的意思是我有縮寫的列表,當用戶點擊一個,我想刪除所有引腳,其中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; 

這是我的寵物類:

@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; 

顯然類名是公正的例子清酒。

回答

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

+0

我沒有pin.name。我有pin.object.name。 –

+0

你可以使用一個關鍵路徑的謂詞,例如: - [[NSPredicate predicateWithFormat:@「object.name like%@」,nameOfObject];' 我編輯了上面的答案 – sleepwalkerfx

0

使用

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

這解決了你的問題? – Avt