过滤NSManagedObject的字符串数组

时间:2015-04-10 07:46:19

标签: xcode swift core-data nspredicate nsset

我有像这样的NSManagedObject类

class Company: NSManagedObject {
    @NSManaged var name:    String
    @NSManaged var kind:    String
    @NSManaged var tags:    NSSet?
}

其中"标签"包含字符串数组(不是NSManagedObjects)。我试图像这样过滤它:

let request = NSFetchRequest(entityName: "Company")
request.returnsObjectsAsFaults = false
request.predicate = NSPredicate(format: "ANY %@ in tags", tag)
request.fetchBatchSize = 20
let results = context.executeFetchRequest(request, error: nil)!

但它没有用。我也尝试过这些可能性:

NSPredicate(format: "ANY tags CONTAINS %@", tag)
NSPredicate(format: "ANY tags.allObjects CONTAINS %@", tag)

2 个答案:

答案 0 :(得分:0)

我认为您的谓词格式可能不正确。

尝试:

request.predicate = NSPredicate(format: "ANY %@ in %@", tag, tags)

请在此处阅读相应的Apple Documentation

答案 1 :(得分:0)

在搜索上花了很多时间之后,我发现的唯一解决方案是将tags的类型更改为String,并按照以下方式对其进行过滤:

NSPredicate(format: "ANY tags CONTAINS[CD] %@", tag)

似乎无法过滤NSSet

NSManagedObject属性