บริบทที่หลากหลายสำหรับแอปพลิเคชันโกโก้ตามเอกสาร?

ดังนั้นฉันจึงสร้างแอปพลิเคชันที่ใช้เอกสารใน Cocoa และพยายามทำความเข้าใจ NSManagedObjectContext ฉันได้อ่าน "Core Data Basics" ของ Apple แล้ว แต่ไม่สามารถเข้าใจได้ ในแอปพลิเคชันของฉัน ฉันสร้างคลาส CoreDataUtility แบบกำหนดเองเพื่อให้คลาสทั้งหมดของฉันสามารถรับบริบทผ่านบรรทัดโค้ดต่อไปนี้:

MyCoreDataUtility *coreData = [MyCoreDataUtility sharedCoreDataUtility];
NSManagedObjectContext *context = [coreData context];

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

ดังนั้นคำถามของฉันคือ:

  1. ฉันมีข้อสันนิษฐานว่าทุกครั้งที่ฉันสร้างหน้าต่างใหม่บริบทใหม่จะถูกสร้างขึ้น ถูกต้องหรือไม่
  2. หากมีการสร้างบริบทใหม่และมีความแตกต่างกัน (จริง ๆ แล้วฉันพิมพ์ที่อยู่หน่วยความจำของทั้งสองบริบทและที่อยู่ต่างกัน) สิ่งนี้เกี่ยวข้องกับผู้ประสานงานร้านค้าถาวรหรือที่เก็บวัตถุถาวรหรือไม่ (ทั้งสองแนวคิดนี้เช่นกัน คลุมเครือในใจของฉัน)?
  3. หากเอกสารทั้งหมดอ้างอิงถึงบริบทเดียวกัน ฉันมีหน้าที่รับผิดชอบในการสร้างบริบทใหม่ทุกครั้งที่สร้างเอกสารหรือไม่

ขอบคุณทุกคน!


person schmudu    schedule 08.08.2012    source แหล่งที่มา


คำตอบ (1)


ฉันมีข้อสันนิษฐานว่าทุกครั้งที่ฉันสร้างหน้าต่างใหม่บริบทใหม่จะถูกสร้างขึ้น ถูกต้องหรือไม่

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

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

หากเอกสารทั้งหมดอ้างอิงถึงบริบทเดียวกัน ฉันมีหน้าที่รับผิดชอบในการสร้างบริบทใหม่ทุกครั้งที่สร้างเอกสารหรือไม่

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

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

person SystematicFrank    schedule 09.08.2012
comment
ขอบคุณฟรานซิสโก...ขออภัยที่เสียบอลในการตอบกระทู้นี้ - person schmudu; 03.10.2012