私はしばらくこの問題に悩まされていますが、それを正しくする方法が思いつかないようです。できる限りわかりやすく説明しようと思います。
私のコア データ モデルには 3 つのエンティティがあります。職場、患者、引継ぎ。
Workplaceは複数のPatientを持つことができます。また、患者は複数のWorkplaceに属することができます。
患者は 1 つのハンドオーバーを持つことができ、その逆も同様です。
アプリでは、Workplaces のリストがユーザーに表示されます。ユーザーが Workplace を選択すると、その選択された Workplace に属し、今日の引き継ぎがある一連の患者を取得する必要があります。患者は複数の引き継ぎを行うことができるため、患者のレコードが重複する可能性がありますが、問題ありません。
これが私が今していることです。まず、選択したユーザーの Workplace オブジェクトを取得します。次に、Patients を反復処理し、Patient オブジェクトの 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!
}
およびメソッドはオブジェクト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 < ?))
私の述語に何か問題があるかどうか、誰か教えてもらえますか? または、これに完全にアプローチするさまざまな方法がある場合は? 本当にありがたいです。
ありがとうございました。