ค่าที่ไม่ซ้ำจากข้อมูลหลัก

ฉันมีแอปที่ใช้ข้อมูลหลักซึ่งจัดการบันทึกของตัวแทนจำหน่ายรถยนต์ แต่ละบันทึกจะจัดเก็บที่อยู่ของตัวแทนจำหน่าย ซึ่งแบ่งออกเป็นส่วนประกอบ addressLine1, addressLine2, city, state และ zip โดยแต่ละรายการจะถูกจัดเก็บเป็นสตริงในที่เก็บข้อมูล

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

ฉันจะรู้วิธีการทำสิ่งนี้อย่างง่ายดายด้วยแบบสอบถาม SQL แต่สิ่งนี้ทำใน Core Data ได้อย่างไร

ขอบคุณมาก ๆ!


person John Stupak    schedule 22.03.2010    source แหล่งที่มา


คำตอบ (3)


ข้อมูลหลักมีตัวเลือกในการรับบันทึกที่แตกต่างกัน ไม่แนะนำให้ใช้วิธีการรับผลลัพธ์ที่ไม่ซ้ำใครโดยใช้ NSArray และ NSSets

[fetchRequest setResultType:NSDictionaryResultType];
NSDictionary *entityProperties = [entity propertiesByName];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:[entityProperties objectForKey:@"<<yourattrib>"]]];
[fetchRequest setReturnsDistinctResults:YES];

โปรดดูเอกสารประกอบของ Apple และตรวจสอบ คำตอบสำหรับ จะดึงค่าที่แตกต่างกันใน Core Data ได้อย่างไร

person palaniraja    schedule 17.03.2012

คุณพูดถูก ไม่มีวิธีที่ "ง่าย" ในการทำเช่นนี้กับ Core Data เนื่องจาก Core Data ไม่ใช่ฐานข้อมูล อย่างไรก็ตามมันเป็นไปได้ ต่อไปนี้เป็นแนวคิดทั่วไป:

  1. ดึงวัตถุตัวแทนจำหน่ายของคุณทั้งหมดผ่านทาง NSFetchRequest เพื่อให้การสืบค้นง่ายขึ้น คุณสามารถตั้งค่าคำขอดึงข้อมูลให้ดึงเฉพาะแอตทริบิวต์ city ได้
  2. ดำเนินการ NSArray * uniqueCities = [fetchedDealers valueForKeyPath:@"@distinctUnionOfObjects.city"];
person Dave DeLong    schedule 22.03.2010

วิธีที่รวดเร็วเพื่อให้แน่ใจว่าชุดของสิ่งต่าง ๆ มีเอกลักษณ์คือการใช้ NSSet เมื่อคุณได้ผลลัพธ์สำหรับการสืบค้นเกี่ยวกับเมืองแล้ว ให้นำ NSArray ของคุณไปดำเนินการ

NSSet* uniqueResults = [NSSet setWithArray:resultsArray];

คุณสามารถแปลงชุดเป็นคลาสคอลเลกชันอื่นได้หากสะดวกกว่า หรือเพียงแค่ตัวแจงนับอ็อบเจ็กต์ที่จะทำอะไรบางอย่างกับคลาสเหล่านั้นทั้งหมด ฉันไม่รู้ว่าแนวทางนี้หรือวิธี valueForKeyPath จาก Dave DeLong นั้นมีประสิทธิภาพมากกว่าหรือไม่

person Adam Eberbach    schedule 22.03.2010