Tidak dapat memfilter setelah Tanggal di Realm Swift

Saya mencoba menerapkan filter pada ranah yang menyertakan Tanggal tetapi tidak berhasil.

Saya menemukan bahwa objek Date tidak dapat diteruskan karena format %@ mengharapkan objek Foundation sebagai argumen, jadi saya telah menerapkan cast ke NSDate.

let newDate = Date()
realm.objects(E.self)
            .filter(String(format: "%@ <= %@", key, newDate as NSDate)).first

Masalah yang muncul adalah "Tidak dapat mengurai stempel waktu format string==20-03-2020 08:21:00 +0000"

key adalah nama field, yang dalam hal ini adalah "cap waktu" dan pada modelnya bertipe Tanggal.

Setiap masukan dihargai.

Terima kasih


person hepifish    schedule 20.03.2020    source sumber
comment
Saya pikir Anda bermaksud menulis .filter("\(key) <= %@", newDate as NSDate)?   -  person Sweeper    schedule 20.03.2020
comment
Saya telah berhasil menggunakan .filter(String(format: "%@ = '%@'", key, value)).first sebelumnya, tetapi menggunakan string, bukan Tanggal. Saya tidak 100% yakin bagaimana cara melakukannya, tapi saya akan mencoba saran Anda juga, terima kasih.   -  person hepifish    schedule 20.03.2020
comment
@Sweeper sepertinya berhasil, tapi saya tidak yakin kenapa :)) Bisakah Anda memposting jawaban dengan ini dan mungkin penjelasannya sehingga saya bisa menandainya dengan benar?   -  person hepifish    schedule 20.03.2020


Jawaban (1)


Kamu harus menggunakan:

.filter("\(key) <= %@", newDate as NSDate)

Ini menyebabkan kelebihan metode filter Realm yang menerima format dan argumen.

String(format:) bukan hal yang tepat untuk digunakan di sini, karena itu hanya memformat string secara umum. Namun di sini, Anda ingin tanggal diformat sesuai aturan format NSPredicate. Sebaliknya, key hanya dapat diinterpolasi ke dalam string karena nama kolom tabel tidak memerlukan format khusus.

Jika key berasal dari UITextField atau sesuatu seperti itu, maka Anda mungkin perlu berhati-hati terhadap serangan injeksi juga, dan memvalidasi dan/atau menghindari key dengan benar sebelumnya.

person Sweeper    schedule 20.03.2020
comment
Terima kasih banyak, kuncinya berasal dari layanan dalam react-native, jadi menurut saya itu tidak akan menjadi masalah. - person hepifish; 20.03.2020