พาธคีย์นิพจน์การได้มาซึ่งข้อมูลหลักใช้ตัวดำเนินการเป็นส่วนประกอบระดับกลาง

ฉันกำลังพยายามเขียนนิพจน์ที่มาสำหรับผลรวมของคุณลักษณะความสัมพันธ์หลายรายการ

ฉันมีสินค้าและกลุ่มสินค้ามีราคาและราคารวม (จำนวน * ราคา) ฉันต้องการเขียนนิพจน์สำหรับราคารวมของกลุ่มเป็นผลรวมของส่วนประกอบต่างๆ

ป้อนคำอธิบายรูปภาพที่นี่

เมื่อฉันสร้างฉันได้รับข้อผิดพลาด

ข้อผิดพลาด: คุณสมบัติที่กำหนดค่าไม่ถูกต้อง: เส้นทางคีย์ LAEItemGroup.totalPrice “[email protected]” ใช้ตัวดำเนินการเป็นส่วนประกอบระดับกลาง

ตามเอกสารประกอบ และWWDC 2019 การสร้างแอปด้วย Core Data ควรเป็นไปได้ที่จะได้ผลรวมของความสัมพันธ์แบบ a to many

ใครก็ได้โปรดช่วยฉันค้นหาไวยากรณ์ที่ถูกต้องหรือวิธีการทำเช่นนั้น

ในการทำงานฉันพยายามเขียน var ที่ใช้งานได้ในชั้นเรียนนั้นเช่นกัน

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

เหตุใดค่า KeyPath จึงใช้งานได้ แต่ไม่อยู่ในเครื่องมือแก้ไขโมเดล


person zombie    schedule 07.07.2020    source แหล่งที่มา
comment
คุณได้ลอง items.totalPrice.@sum แล้วหรือยัง? คุ้มค่าที่จะลอง เนื่องจากได้รับข้อความแสดงข้อผิดพลาด   -  person pbasdf    schedule 07.07.2020


คำตอบ (3)


ตอนนี้ผมได้มีโอกาสตรวจสอบแล้ว ดูเหมือนว่ารูปแบบที่ใช้โดยตัวแก้ไขโมเดลนั้นมีไว้เพื่อให้ตัวดำเนินการรวมอยู่ที่ส่วนท้ายของนิพจน์ (ซึ่งตามที่คุณชี้ให้เห็น จะแตกต่างจากรูปแบบที่ใช้ในนิพจน์อื่น):

items.totalPrice.@sum
person pbasdf    schedule 07.07.2020
comment
การแสดงออกของรายการทั้งหมดที่เขียนเป็น price * amount ทำให้เกิดข้อยกเว้นในการสร้างคอนเทนเนอร์ของร้านค้า exception: currently unsupported (too many keypaths) คุณคิดว่าเป็นเพราะเหตุผลเดียวกันหรือไม่ และฉันจะหาข้อมูลเพิ่มเติมเกี่ยวกับวิธีการเขียนไวยากรณ์ที่ถูกต้องได้ที่ไหน - person zombie; 08.07.2020
comment
เมื่อฉันทำสิ่งนั้นเพื่อหาผลรวม ฉันได้ *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'currently unsupported (unsupported function on to many (not count or sum))' มีความคิดอะไรบ้างว่าทำไม? - person alpennec; 09.11.2020

ใช้ items.totalPrice.@sum เป็นนิพจน์ของคุณสมบัติที่ได้รับในตัวแก้ไขโมเดลของ Xcode

ดูเหมือนว่าจะใช้งานได้กับประเภทตัวเลขเท่านั้นใช่ไหม ฉันมีคุณสมบัติ maxDate พร้อมนิพจน์คุณสมบัติที่ได้รับเป็น

items.createdAt.@max

มันคอมไพล์แต่เกิดข้อผิดพลาดที่รันไทม์:

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

โดยที่ Date คือประเภทข้อมูลสำหรับ createdAt

person spnkr    schedule 26.07.2020
comment
ฉันเห็นข้อยกเว้นนั้นหลายครั้งว่าฉันไม่สามารถอัปเดตโค้ดเพื่อใช้งานได้ ฉันหวังว่าสิ่งนี้จะดีขึ้น - person zombie; 26.07.2020
comment
ไม่รองรับ @max เฉพาะ @count และ @sum แต่เมื่อฉันพยายามทำ items.totalPrice.@sum ฉันพบข้อผิดพลาดต่อไปนี้: *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'currently unsupported (unsupported function on to many (not count or sum))' มีความคิดอะไรบ้างว่าทำไม? - person alpennec; 09.11.2020

ฉันเพิ่งเสร็จสิ้นห้องปฏิบัติการ WWDC Core Data โดยมี Rishi ผู้ช่วยฉันในเรื่องนี้! คุณควรใช้ sum:(items.totalPrice) แทนไวยากรณ์ .@sum ไวยากรณ์วงเล็บยังสามารถใช้สำหรับฟังก์ชันอื่นๆ บางอย่างได้ (เช่น count:(items) (จำนวนรายการในความสัมพันธ์ต่อกลุ่ม) หรือ max:(items.createdAt) (วันที่ของรายการล่าสุด))

person halleygen    schedule 11.06.2021
comment
ขอบคุณ คุณรู้ไหมว่าเราซ้อนฟังก์ชันเหล่านี้หรือลึกลงไปอีกสองระดับในความสัมพันธ์ - person zombie; 11.06.2021
comment
@zombie ไม่ฉันไม่คิดอย่างนั้น ในWWDC19 พูดคุย (ประมาณ 19:58) ซึ่งพวกเขาแนะนำคุณลักษณะที่ได้รับ พวกเขากล่าวว่านิพจน์ที่มาสามารถทำได้ อ้างถึงคุณสมบัติใดๆ ของเอนทิตีในระดับลึกหนึ่งระดับ - person halleygen; 23.07.2021