我被这个问题困扰了一段时间,现在我似乎想不出一种方法来解决这个问题。我会尽量解释清楚。
我的核心数据模型中有 3 个实体。工作场所、患者和移交。
一个Workplace可以有多个Patient。一个Patient也可以属于多个Workplace。
患者可以进行一次切换,反之亦然。
在应用程序中,向用户显示工作场所列表。当用户选择一个工作场所时,我需要获取一组患者,这些患者属于该所选工作场所并且今天有交接。由于患者可以有多个移交,因此患者的记录可能重复,这没关系。
这就是我现在正在做的事情。首先,我检索所选用户的 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())
这是des过滤的方法。
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!
}
和方法转换对象getStartDate()
并获取其开始时间和结束时间以获取日期框架。我让它们在其他一些地方使用过,它们可以工作。这是关于它的详细解释。getEndDate()
NSDate
无论如何,我的loadHandovers()
方法返回 0 个结果。不可能,因为当我插入数据时,我可以看到今天的移交。下面是从核心数据执行的 SQL 查询。
SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZDATE, t0.ZSIGNEDBY, t0.ZSTATUS, t0.ZPATIENT
FROM ZHANDOVER t0
JOIN ZPATIENT t1 ON t0.ZPATIENT = t1.Z_PK
WHERE ( t1.ZID IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
AND ( t0.ZDATE > ? AND t0.ZDATE < ?))
谁能告诉我我的谓词是否有问题?或者如果有不同的方法可以完全解决这个问题?我真的很感激。
谢谢你。