2016-08-28 45 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

是的,那就是我所追求的。好的,谢谢我会研究谓词。如果你有一些很好的示例代码 –