2010-10-22 55 views
0

我有一個對象數組(用戶) 每個用戶都有一個名爲「devices」的nsset 是否可以進行過濾,以便數組返回具有特定名稱的設備的所有用戶。iphone&Objective C - 使用NSPredicate過濾數組?

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"devices.category==%@", @"mobile"]; 
myArray = [allUsersArray filteredArrayUsingPredicate:predicate]; 

回答

5

你已經差不多知道了,只是一點點了。

每個User有一套Devices。這意味着當你調用[aUser valueForKeyPath:@"devices.category"]時,它會給你一個集合設備類別的聚合。換句話說,如果你的用戶有兩個設備,他們(分別)有一個category「移動」和「桌面」,那麼"devices.category"將返回(mobile, desktop)。這是一個矢量值。它包含多個元素。

但是,您將其與標量值(單個元素)@"mobile"進行比較。

我認爲你要做的是希望選擇至少有一個設備位於「移動」類別的所有用戶,對嗎?如果是這樣的話,那麼你只需要使用ANY關鍵字,讓你的謂語正是如此:

[NSPredicate predicateWithFormat:@"ANY devices.category = %@", @"mobile"] 

有關這些聚合函數的詳細信息,請參閱Predicate Programming Guide

+0

非常感謝,正是我想要的 – aryaxt 2010-10-22 18:18:27