Ios 不返回结果的复合谓词

Ios 不返回结果的复合谓词,ios,sql,core-data,nsfetchrequest,nscompoundpredicate,Ios,Sql,Core Data,Nsfetchrequest,Nscompoundpredicate,我被这个问题困扰了一段时间,现在我似乎想不出一个正确的方法。我会尽量解释清楚的 我的核心数据模型中有3个实体工作场所、患者和交接 一个工作场所可以有多个患者。同样,一名患者可以属于多个工作场所 患者可以进行一次交接,反之亦然 在应用程序中,会向用户显示工作场所列表。当用户选择一个工作场所时,我需要获得一组患者,他们属于所选工作场所,并且有今天的讲义。因为一个病人可以有多个交接,病人可以有重复的记录,这没关系 这就是我现在正在做的。首先,我检索所选用户的Workplace对象。然后我遍历它的病人

我被这个问题困扰了一段时间,现在我似乎想不出一个正确的方法。我会尽量解释清楚的

我的核心数据模型中有3个实体工作场所患者交接

一个工作场所可以有多个患者。同样,一名患者可以属于多个工作场所

患者可以进行一次交接,反之亦然

在应用程序中,会向用户显示工作场所列表。当用户选择一个工作场所时,我需要获得一组患者,他们属于所选工作场所,并且有今天的讲义。因为一个病人可以有多个交接,病人可以有重复的记录,这没关系

这就是我现在正在做的。首先,我检索所选用户的Workplace对象。然后我遍历它的病人,提取病人对象的ID,并将它们收集到一个数组中。然后,我传递患者ID数组和日期,以筛选出在给定日期进行交接的患者

let workplace = db.loadWorkplace(155) // 155 is the ID of the Workplace

var patientIDs: [Int] = []
for p in workplace.patients {
    let patient = p as Patient
    patientIDs.append(patient.id)
}
handovers = db.loadHandovers(patientIDs, date: NSDate.date())
这是设计过滤的方法

public func loadHandovers(patients: [Int], date: NSDate) -> [AnyObject] {

    let fetchRequest = NSFetchRequest()
    let entityDescription = NSEntityDescription.entityForName("Handover", inManagedObjectContext: managedObjectContext!)
    let patientPredicate = NSPredicate(format: "patient.id IN %@", patients)
    let datePredicate = NSPredicate(format: "date > %@ AND date < %@", getStartDate(date), getEndDate(date))

    let compoundPredicate = NSCompoundPredicate(type: .AndPredicateType, subpredicates: [patientPredicate, datePredicate])

    fetchRequest.entity = entityDescription
    fetchRequest.predicate = compoundPredicate

    var error: NSError?
    let result = managedObjectContext?.executeFetchRequest(fetchRequest, error: &error)
    return result!
}
谁能告诉我我的谓词是否有问题吗?或者如果有不同的方法来处理这个问题?我真的很感激


多谢各位

使用对象图,这看起来非常简单。尽量避免冗长的获取请求

workplace.patients.filteredSetUsingPredicate(
  NSPredicate(format: "handovers.date > %@ && handovers.date < %@", 
              startOfDay, endOfDay))

多对多关系被认为是糟糕的设计,而您正遇到问题,因为您正试图解决此设计缺陷。考虑在工作场所和患者之间引入一个桥梁实体,将您的M-M关系转变为两个1对M关系。然后,您可以放弃现有的整个阵列解决方案,直接解决原始问题。谢谢。我不知道对象图查询。
workplace.patients.filteredSetUsingPredicate(
  NSPredicate(format: "handovers.date > %@ && handovers.date < %@", 
              startOfDay, endOfDay))
workplace.handovers.filteredSetUsingPredicate(
  NSPredicate(format: "date > %@ && date < %@", startOfDay, endOfDay))