0Pricing
Swift Academy · บทเรียน

สแตก 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. สแตก Core Data: การตั้งค่า NSPersistentContainer
  2. SwiftData @Model และ ModelContext
  3. ความสัมพันธ์และ Fetch Descriptors
  4. การย้ายโครงสร้างแบบเบาและการซิงค์ CloudKit
← กลับไปที่ Swift Academy