jalur kunci ekspresi derivasi data inti menggunakan operator sebagai komponen perantara

Saya mencoba menulis ekspresi derivasi untuk jumlah atribut hubungan a ke banyak.

Saya memiliki item dan grup, item tersebut memiliki harga dan total harga (jumlah * harga). Saya ingin menulis ekspresi harga total grup sebagai jumlah komponennya.

masukkan deskripsi gambar di sini

Ketika saya membangun saya mendapatkan kesalahan

kesalahan: Properti Salah Konfigurasi: Jalur kunci LAEItemGroup.totalPrice “[email protected]” menggunakan operator sebagai komponen perantara

menurut dokumentasi dan WWDC 2019 Membuat Aplikasi dengan Data Inti seharusnya bisa mendapatkan manfaat dari banyak hubungan.

Bisakah seseorang membantu saya menemukan sintaks atau cara yang benar untuk melakukannya.

Sebagai solusinya, saya mencoba menulis var yang berfungsi di kelas itu juga

@objc
public var totalPrice: Double {
    value(forKeyPath: "[email protected]") as? Double ?? 0
}

jadi mengapa nilai KeyPath berfungsi tetapi tidak di editor model?


person zombie    schedule 07.07.2020    source sumber
comment
Sudahkah Anda mencoba item.totalPrice.@sum? Patut dicoba, mengingat pesan kesalahannya.   -  person pbasdf    schedule 07.07.2020


Jawaban (3)


Saya sekarang memiliki kesempatan untuk memeriksanya. Tampaknya format yang digunakan oleh editor model adalah agar operator agregat berada di akhir ekspresi (yang seperti Anda tunjukkan, berbeda dari format yang digunakan dalam ekspresi lain):

items.totalPrice.@sum
person pbasdf    schedule 07.07.2020
comment
ekspresi total item yang ditulis sebagai price * amount menimbulkan pengecualian dalam pembuatan wadah penyimpanan exception: currently unsupported (too many keypaths) menurut Anda apakah ini karena alasan yang sama dan di mana saya dapat menemukan lebih banyak tentang cara menulis sintaks yang benar - person zombie; 08.07.2020
comment
Ketika saya melakukan itu untuk sejumlah uang, saya mendapat *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'currently unsupported (unsupported function on to many (not count or sum))'. Tahu kenapa? - person alpennec; 09.11.2020

Gunakan items.totalPrice.@sum sebagai ekspresi properti turunan di editor model Xcode.

Ini sepertinya hanya berfungsi untuk tipe numerik? Saya memiliki properti maxDate dengan ekspresi properti turunan

items.createdAt.@max

Ini mengkompilasi tetapi menimbulkan kesalahan saat runtime:

'NSInvalidArgumentException', reason: 'currently unsupported (too many steps)

Dimana Tanggal adalah tipe data untuk createdAt

person spnkr    schedule 26.07.2020
comment
Saya melihat pengecualian itu beberapa kali sehingga saya tidak dapat memperbarui kode saya untuk menggunakannya. Saya harap ini akan diperbaiki - person zombie; 26.07.2020
comment
@max tidak didukung. Hanya @count dan @sum. Namun ketika saya mencoba melakukan items.totalPrice.@sum, saya mengalami error berikut: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'currently unsupported (unsupported function on to many (not count or sum))'. Tahu kenapa? - person alpennec; 09.11.2020

Saya baru saja menyelesaikan lab Data Inti WWDC dengan Rishi yang membantu saya dalam hal ini! Anda harus menggunakan sintaks sum:(items.totalPrice) alih-alih .@sum. Sintaks tanda kurung juga dapat digunakan untuk beberapa fungsi lainnya (misalnya count:(items) (jumlah item dalam hubungan ke-banyak) atau max:(items.createdAt) (tanggal item terbaru)).

person halleygen    schedule 11.06.2021
comment
Terima kasih tahukah Anda jika kita menyarangkan fungsi-fungsi ini atau melangkah lebih dalam ke dalam hubungan - person zombie; 11.06.2021
comment
@zombie Tidak, menurut saya tidak. Dalam pembicaraan WWDC19 (sekitar pukul 19:58) saat mereka memperkenalkan atribut turunan, mereka mengatakan ekspresi derivasi bisa mengacu pada salah satu properti suatu entitas, sedalam satu tingkat. - person halleygen; 23.07.2021