【问题标题】:Swift NSPREDICATE not like valueSwift NSPREDICATE 不喜欢价值
【发布时间】:2016-04-18 22:13:56
【问题描述】:

实体A:体操运动员 名 姓氏

一对多 MeetResults

EntityB:MeetResults 见面日期 barScore 光束评分 地板分数 VaultScore

我正在将所有设置为活动的体操运动员加载到选择器中。当我创建一个 NSSET result.meetresults = meetScore.copy() as? NSSet 可以正常工作我正在尝试找出如何删除在该日期已经拥有 NSSET 的体操运动员。任何帮助将不胜感激。

func getGymnasts() {

        let fetchRequest = NSFetchRequest(entityName: "Gymnast")

        let sortDescriptor1 = NSSortDescriptor(key: "fullName", ascending: true)

        fetchRequest.sortDescriptors = [sortDescriptor1]

        let filter1 = NSPredicate(format: "isActive == %@", "Yes")

        let filter2 = NSPredicate(format: "ANY meetresults.meetDate != %@", "\(meetDateText.text!)")

        let predicate = NSCompoundPredicate(type: NSCompoundPredicateType.AndPredicateType, subpredicates: [filter1, filter2])

        fetchRequest.predicate = predicate

        //fetchRequest.predicate = filter1

        do {

            self.gymnastArray = try AD.managedObjectContext.executeFetchRequest(fetchRequest) as! [Gymnast]

            self.gymnastPicker.reloadAllComponents()


        } catch {

            fatalError("Fetch Failed")
        }

    }

【问题讨论】:

  • 大概meetDate 存储为日期,而不是字符串?
  • 没有日期存储为字符串。
  • 您验证了字符串格式吗?您尝试过子查询方法吗?
  • 我已经确认如果我点击新建来添加另一个体操运动员,如果说我已经添加了 3 名体操运动员,那是我必须在我的选择器中选择的唯一 3 名。我找不到使用(不等于)或(不喜欢)一个值。不管我使用 != 还是 == 它仍然会带回我添加的 3 名体操运动员。 let filter2 = NSPredicate(format: "ANY meetresults.meetDate != %@", "(meetDateText.text!)")
  • 所以你的目标实际上是让在指定日期没有比赛的体操运动员返回?

标签: swift core-data nspredicate


【解决方案1】:

多对多关系有时很尴尬。您可以使用子查询语法查询内部提取的计数以找到符合您条件的Meets,然后检查是否有:

let filter2 = NSPredicate(format: "SUBQUERY(meetresults.meetDate, $m, $m.meetDate == %@).@count == 0", meetDateText.text!)

【讨论】:

  • 发现小问题。这会将他们排除在任何其他 meetresults 之外。创建具有不同日期的新会议,选择器不会列出已经有会议结果的任何人。
  • 我原来的有 ==,你的有 != 所以它应该是倒退的
  • 谢谢,一定是因为我在实际获得日期值之前调用了我的函数并键入了日期,移动了一些项目,现在它似乎正在工作,但也添加了一个类似的 SUBQUERY(meetresults .meetName, $m, $m.meetName == %@).@count == 0"
猜你喜欢
  • 2013-05-26
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多