Azimjon Abdurasulov

Core Data / SwiftData

Darsliklar (Tutorials)

Core Data / SwiftData — To'liq Darslik

Mundarija

  1. Nega lokal ma'lumotlar bazasi kerak?
  2. Core Data asoslari
  3. Entity va Attributes yaratish
  4. CRUD operatsiyalari
  5. NSFetchRequest va Predicate
  6. Relationships (Bog'lanishlar)
  7. Lightweight Migration
  8. Background Thread'da ishlash
  9. SwiftData (iOS 17+)
  10. Core Data vs SwiftData vs Realm
  11. Real loyiha: Notes App
  12. Xulosa

1. Nega lokal ma'lumotlar bazasi kerak? {#motivatsiya}

Ilova har doim ham internetga muhtoj bo'lmasligi kerak.

  • Offline rejim: Samolyotda yoki internet yomon joyda ilovangiz ishlashi uchun.
  • Tezlik: Ma'lumotni qurilmani o'zidan o'qish serverdan ko'ra ming marta tezroq.
  • UserDefaults cheklovi: UserDefaults kichik sozlamalar (settinglar) uchun, katta ma'lumotlar uchun emas.

2. Core Data asoslari {#core-data-asoslari}

Core Data — bu shunchaki ma'lumotlar bazasi emas, bu Obyektlarni Boshqarish Framework'i.

  • NSManagedObject: Bitta ma'lumot birligi (xuddi SQL dagi Row kabi).
  • NSManagedObjectContext: Bizning "scratchpad" (mashq daftari). Barcha o'zgarishlar shuyerda qilinadi va save() orqali bazaga yoziladi.
  • NSPersistentContainer: Core Data stekini (stack) o'zida ushlab turuvchi asosiy konteyner.

3. Entity va Attributes yaratish {#entity-yaratish}

Xcode ichidagi .xcdatamodeld fayli orqali biz modellarni chizamiz.

  • Entity: Klass nomi (masalan, Note).
  • Attributes: Variable nomlari (masalan, title: String, content: String, date: Date).

4. CRUD operatsiyalari {#crud-operatsiyalari}

Create (Yaratish):

let context = container.viewContext
let newNote = Note(context: context)
newNote.title = "Dars"
newNote.date = Date()

try? context.save() // Bazaga saqlash

Read (O'qish):

let request: NSFetchRequest<Note> = Note.fetchRequest()
let notes = try? context.fetch(request)

5. NSFetchRequest va Predicate {#fetch-request}

Faqat kerakli ma'lumotlarni filtrlash uchun NSPredicate ishlatiladi.

let request: NSFetchRequest<Note> = Note.fetchRequest()

// Faqat "iOS" so'zi bor sarlavhalarni olish
request.predicate = NSPredicate(format: "title CONTAINS[cd] %@", "iOS")

// Bo'yicha tartiblash (sort)
request.sortDescriptors = [NSSortDescriptor(key: "date", ascending: false)]

6. Relationships (Bog'lanishlar) {#relationships}

Obyektlar bir-biri bilan bog'lanishi mumkin.

  • One-to-One: Masalan, bitta foydalanuvchi — bitta profil.
  • One-to-Many: Masalan, bitta kategoriya — ko'plab postlar.

7. Lightweight Migration {#migration}

Agar siz Entity'ga yangi field qo'shsangiz, ilova crash bo'ladi. Buning oldini olish uchun "Migration" kerak. Xcode buni avtomatik (lightweight) qila oladi, agar o'zgarishlar oddiy bo'lsa.


8. Background Thread'da ishlash {#background-thread}

Katta hajmdagi ma'lumotlarni saqlash UI'ni qotirib qo'yishi mumkin. Shuning uchun privateContext ishlatiladi:

container.performBackgroundTask { context in
    // Bu yerda og'ir ishlar bajariladi
    try? context.save()
}

9. SwiftData (iOS 17+) {#swift-data}

SwiftData — Apple'ning Core Data dan keyingi yangi framework'i. U to'liq Swift va SwiftUI tili uchun moslashtirilgan.

@Model
class Note {
    var title: String
    var content: String
    
    init(title: String, content: String) {
        self.title = title
        self.content = content
    }
}

// SwiftUI da ishlatish
@Query var notes: [Note]

10. Core Data vs SwiftData vs Realm {#comparison}

XususiyatCore DataSwiftDataRealm
PlatformaApple (Eski)Apple (Yangi, iOS 17+)Cross-platform
Osonlik🟠 O'rtacha🟢 Juda oson🟢 Oson
SwiftUI🟠 Muammoli🟢 Ideal🟢 Yaxshi

11. Real loyiha: Notes App {#real-loyiha}

Darslikda biz to'liq "Eslatmalar" ilovasini quramiz. Foydalanuvchi yangi note qo'shishi, ularni qidirishi va o'chirishi mumkin bo'ladi.


12. Xulosa {#xulosa}

Lokal ma'lumotlar bazasi ilovani professional qiladi.

  • Eskiroq loyihalar uchun Core Data'ni bilish shart.
  • Yangi loyihalar uchun SwiftData'ga o'tish tavsiya etiladi.

Vazifa: Core Data bilan oddiy "Shopping List" ilovasini yaratib ko'ring! 🛒

Markdown manba

iOS Lessons