2016-08-28 123 views
0

我想通過以下方式對領域對象列表執行過濾器。關係對象的Swift領域過濾器

我有兩個對象類別和公司

class Category: Object { 
    dynamic var name = "" 
    dynamic var isActive = true 
    let companies = List<Company>() 
} 

class Company: Object { 
    dynamic var name = "" 
} 

類別從一個控制器發送到另一個讓所有的公司在該類別可以顯示

var category: Category! 
var rlmCompanies: List<Company>? 

到目前爲止好,從這我可以顯示公司名單。但是,我試圖在控制器的頂部添加一個切換條,以便我可以進一步過濾顯示的公司列表,看它們是否處於活動狀態。

我想要的代碼是在下面的事情我都試過

rlmCompanies = category.companies.filter("ANY isActive == true") 
rlmCompanies = category.companies.filter("ANY companies.isActive == true") 
rlmCompanies = category.companies.filter("companies.isActive == true") 
rlmCompanies = rlmCompanies.filter("ANY companies.isActive == true") 
rlmCompanies = self.rlmCompanies.filter("ANY companies.isActive == true") 

所有這些嘗試給了類似的錯誤,是對的線路之一線:

No filter candidates produce the expected contextual result type List<Company> 

我因此沒有想法。我可以看到這與列表初始化有關,但無法看到如何處理它

+0

是你分配給你的控制器類屬性的'rlmCompanies'? – bdash

+0

rlmCompanies是控制器類中的變量 –

回答

0

最後,我改變了代碼通過以下方式

我改變了初始化劑是一個結果對象

var rlmCompanies: Results<Company>? 

然後,當我在我添加了返回的所有過濾器的初始列表,等返回一個結果,而不是一個列表

rlmCompanies = category.companies.filter("id <> 'somethingbogus' ") 

我非常有類似ANY而非ID是不是假的,但無法找到該語法

+0

'TRUEPREDICATE'是一個將匹配每個對象的謂詞。 – bdash

0

您看到的錯誤是因爲您正試圖分配Results<T>返回的List.filter到類型List<T>的變量。您的rlmCompanies實例變量應該是Results<Company>而不是類型。

+0

瞭解。那麼如果我聲明一個類型爲Results的變量,如果它是Object中標識爲1:Many的一部分的話。如果我使用var rlmCompanies進行初始化:結果?,然後將其分配給category.companies我也收到一條錯誤消息,說不能將類型List分配給結果。我如何初始化和設置變量以使用結果,如果它是對象中定義的1:M列表的一部分? –

+0

爲了澄清,你是否有時想'rlmCompanies'被過濾,而其他時間不是?如果是這樣,你可以使用謂詞'TRUEPREDICATE'過濾得到一個'Results ',其內容與未過濾的'List '匹配。 – bdash

+0

是的,那就是我所追求的。好的,謝謝我會研究謂詞。如果你有一些很好的示例代碼 –