【问题标题】:Filtering array of strings of NSManagedObject过滤 NSManagedObject 的字符串数组
【发布时间】:2015-06-15 20:25:31
【问题描述】:

我有这样的 NSManagedObject 类

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

其中“tags”包含字符串数组(不是 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)

【问题讨论】:

  • tags 被声明为NSSet?,但你说它包含一个数组。 – 如果tags的值不是托管对象,那为什么要声明为@NSManaged
  • NSSetallObjects 属性,这是一个数组。我不能使用NSManagedObject 属性而不添加@NSManaged

标签: xcode swift core-data nspredicate nsset


【解决方案1】:

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

试试:

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

在此处阅读对应的Apple Documentation

【讨论】:

  • 好吧,如果你这么认为,那么对你有好处。但你没有。您认为自己掌握的内容表明您对尝试编写的代码知之甚少。
  • 顺便说一句,我正在尝试搜索在其“标签”属性中具有特定标签的((所有公司))。
【解决方案2】:

花了很多时间搜索后,我找到的唯一解决方案是将tags的类型更改为String,并像这样过滤:

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

好像不能过滤NSSetNSManagedObject的属性

【讨论】:

    猜你喜欢
    • 2020-05-26
    • 2017-07-15
    • 2022-07-04
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2019-04-04
    相关资源
    最近更新 更多