Какой у вас опыт работы с Core Data?

«Какой у вас опыт работы с Core Data?» — вопрос из категории Базы данных, который задают на 23% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Имею опыт использования Core Data в качестве основного фреймворка для объектно-графового управления и локального хранения данных в iOS-приложениях.

Ключевые аспекты работы:

  • Настройка стека Core Data: Создание NSPersistentContainer, управление контекстами (NSManagedObjectContext).

    lazy var persistentContainer: NSPersistentContainer = {
        let container = NSPersistentContainer(name: "DataModel")
        container.loadPersistentStores { description, error in
            if let error = error {
                fatalError("Не удалось загрузить хранилище: (error)")
            }
        }
        // Конфигурация для автоматического слияния изменений из фонового контекста
        container.viewContext.automaticallyMergesChangesFromParent = true
        container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
        return container
    }()
    
    var viewContext: NSManagedObjectContext {
        return persistentContainer.viewContext
    }
  • Моделирование данных: Работа с *.xcdatamodeld файлом, создание сущностей (Entity), атрибутов, связей (один-ко-многим, многие-ко-многим).
  • Оптимизация запросов: Использование NSFetchedResultsController для эффективной работы с UITableView/UICollectionView и автоматического отслеживания изменений данных.
  • Работа в многопоточности: Создание фоновых контекстов (newBackgroundContext()) для тяжелых операций (импорт данных) с последующим слиянием в главный контекст.
  • Миграции схемы (Schema Migrations):
    • Легковесные миграции (Lightweight): При простых изменениях (добавление атрибута, сущности) — Core Data выполняет их автоматически.
    • Тяжелые миграции (Heavyweight / Manual): При сложных изменениях (разделение сущности, кастомные преобразования данных) — создание карты миграции (Mapping Model) и использование NSMigrationManager.
  • Batch-операции (NSBatchDeleteRequest, NSBatchUpdateRequest): Для эффективного массового удаления или обновления записей напрямую в хранилище SQLite, минуя контекст в памяти.
  • Отладка: Включение флага -com.apple.CoreData.ConcurrencyDebug 1 для обнаружения нарушений многопоточности, анализ SQL-запросов через -com.apple.CoreData.SQLDebug.

Core Data использовался для реализации офлайн-режима, сложных связей между данными и как единый источник истины (single source of truth) в сочетании с сетевым слоем.