我無法理解如何使用謂詞,我有一個非常長的代碼來過濾屬性「type」中的對象,並突然看到方法「filteredArrayUsingPredicate」可以讓我的生活更美好。我嘗試寫謂詞,但我總是得到錯誤;有人可以告訴我如何寫它的權利?使用方法filteredArrayUsingPredicate過濾數組中的對象
我有方法- (void) filterData: (NSString *)filteredWord
:
我也有對象(事件)陣列:的NSArray * eventsArray。 我想使用filteredArrayUsingPredicate獲取新的數組與對象(事件)其屬性(類型)是相等的filterWord。請注意,事件是Core Data Managed子類。
是否有可能通過謂詞做到這一點?
我的一個嘗試:
NSString *propertyName = @"type";
NSArray *eventsArray = [[[[self currentPerson] events] objectEnumerator]allObjects];
NSPredicate *predicte = [NSPredicate predicateWithFormat:@"%k like '%@'",propertyName,filteredWord];
[eventsArray filteredArrayUsingPredicate:predicte];
感謝您的評論我認爲我對預測有一點理解..但是由於某種原因,如果我確定有多個對象具有已篩選類型,filteredArray有0個對象。 順便我用'[[array objectEnumerator] allObjects]'因爲事件是NSSET。 – Dennis
在這種情況下,您可以使用'[set allObjects]'。不需要統計員。而且,UIEvent的type屬性不是一個字符串。這是一個枚舉(整數)。看到我更新的答案。 – DrummerB
實際上,「%K」也可以用來代替「SELF。%@」。 「%K」是謂詞中的關鍵路徑的var arg替換。 - 我碰巧知道(來自Dennis之前的問題),「Event」是一個核心數據管理對象的子類,與「UIEvent」無關。所以「%K LIKE%@」應該可以工作。 –