สแตก Core Data: การตั้งค่า NSPersistentContainer
ตั้งค่าคอนเทนเนอร์ถาวร บริบท และตัวประสานงานในแอป SwiftUI
สแตก Core Data: การตั้งค่า NSPersistentContainer เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
ภาพรวม Core Data
Core Data คือเฟรมเวิร์กกราฟออบเจ็กต์และการจัดเก็บข้อมูลถาวรของ Apple โดยจัดการ SQLite หรือที่จัดเก็บข้อมูลรูปแบบอื่นผ่าน API เชิงวัตถุ
import CoreData
// Key classes: NSPersistentContainer, NSManagedObjectContext
// NSManagedObject, NSFetchRequestการสร้าง NSPersistentContainer
เริ่มต้น NSPersistentContainer ด้วยชื่อโมเดล .xcdatamodeld ของคุณ แล้วโหลดที่จัดเก็บข้อมูลถาวร
let container = NSPersistentContainer(name: "MyModel")
container.loadPersistentStores { desc, error in
if let error { fatalError("Core Data failed: \(error)") }
}รูปแบบตัวควบคุมการจัดเก็บข้อมูลถาวร
ห่อคอนเทนเนอร์ไว้ในโครงสร้าง PersistenceController แบบซิงเกิลตัน หรือแบบฉีดการพึ่งพา เพื่อให้เข้าถึงได้อย่างเป็นระเบียบทั่วทั้งแอป
struct PersistenceController {
static let shared = PersistenceController()
let container: NSPersistentContainer
init() {
container = NSPersistentContainer(name: "MyModel")
container.loadPersistentStores { _, error in
if let error { fatalError("\(error)") }
}
}
}viewContext และ backgroundContext
viewContext คือบริบทสำหรับเธรดหลักที่ใช้กับส่วนติดต่อผู้ใช้ ส่วนงานที่ใช้ทรัพยากรมากให้ใช้ newBackgroundContext()
let viewCtx = PersistenceController.shared.container.viewContext
let bgCtx = PersistenceController.shared.container.newBackgroundContext()การสร้างออบเจ็กต์ที่มีการจัดการ
แทรกออบเจ็กต์ใหม่โดยใช้ NSEntityDescription.insertNewObject หรือตัวเริ่มต้นของคลาสที่สร้างขึ้น
let item = Item(context: viewCtx)
item.timestamp = Date()
try? viewCtx.save()การดึงออบเจ็กต์
ใช้ NSFetchRequest เพื่อค้นหาออบเจ็กต์ Core Data ด้วยเงื่อนไขคัดกรองและตัวอธิบายการเรียงลำดับ
let request: NSFetchRequest<Item> = Item.fetchRequest()
request.sortDescriptors = [NSSortDescriptor(key: "timestamp", ascending: false)]
let items = try? viewCtx.fetch(request)การบันทึกบริบท
เรียก context.save() เสมอเพื่อบันทึกการเปลี่ยนแปลงให้คงอยู่ และครอบด้วยโครงสร้างจัดการข้อผิดพลาดสำหรับโค้ดที่ใช้งานจริง
do {
try viewCtx.save()
} catch {
print("Save failed: \(error)")
viewCtx.rollback()
}การผสาน SwiftUI ด้วย @FetchRequest
ใช้ @FetchRequest ในมุมมอง SwiftUI เพื่ออัปเดตส่วนติดต่อผู้ใช้โดยอัตโนมัติเมื่อ Core Data เปลี่ยนแปลง
struct ItemList: View {
@FetchRequest(
sortDescriptors: [SortDescriptor(\Item.timestamp, order: .reverse)]
) var items: FetchedResults<Item>
var body: some View {
List(items) { Text($0.timestamp!.formatted()) }
}
}การส่ง viewContext เข้า SwiftUI
ส่ง viewContext ผ่านสภาพแวดล้อมของ SwiftUI เพื่อให้มุมมองอ่านและเขียน Core Data ได้
@main
struct MyApp: App {
let persistence = PersistenceController.shared
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.managedObjectContext, persistence.container.viewContext)
}
}
}การลบออบเจ็กต์
เรียก context.delete(object) แล้วบันทึกเพื่อเอาออบเจ็กต์ออกอย่างถาวร
viewCtx.delete(item)
try? viewCtx.save()ที่จัดเก็บในหน่วยความจำสำหรับการทดสอบ
ใช้ที่จัดเก็บในหน่วยความจำเพื่อไม่ให้มีการใช้งานดิสก์ระหว่างการทดสอบหน่วย
let desc = NSPersistentStoreDescription()
desc.type = NSInMemoryStoreType
container.persistentStoreDescriptions = [desc]
container.loadPersistentStores { _, _ in }ตรวจสอบความเข้าใจ
ควรใช้บริบทใดของ NSPersistentContainer สำหรับการอ่านและเขียน Core Data ที่ขับเคลื่อนโดยส่วนติดต่อผู้ใช้
ทบทวนบทเรียน
ตั้งค่า Core Data ด้วย NSPersistentContainer โหลดที่จัดเก็บข้อมูล แล้วห่อไว้ใน PersistenceController ใช้ viewContext บนเธรดหลัก และใช้ newBackgroundContext() สำหรับงานที่ใช้ทรัพยากรมาก ผสานเข้ากับ SwiftUI ผ่าน @FetchRequest และคีย์สภาพแวดล้อมของบริบทออบเจ็กต์ที่มีการจัดการ
คำถามที่พบบ่อย
บทเรียน “สแตก Core Data: การตั้งค่า NSPersistentContainer” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “สแตก Core Data: การตั้งค่า NSPersistentContainer” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “สแตก Core Data: การตั้งค่า NSPersistentContainer”
ตั้งค่าคอนเทนเนอร์ถาวร บริบท และตัวประสานงานในแอป SwiftUI คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “สแตก Core Data: การตั้งค่า NSPersistentContainer” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สแตก Core Data: การตั้งค่า NSPersistentContainer
- SwiftData @Model และ ModelContext
- ความสัมพันธ์และ Fetch Descriptors
- การย้ายโครงสร้างแบบเบาและการซิงค์ CloudKit