0Pricing
Swift Academy · Aula

Pilha do Core Data: configuração de NSPersistentContainer

Configure o container persistente, o contexto e o coordinator em um aplicativo SwiftUI.

Pilha do Core Data: configuração de NSPersistentContainer é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.

Visão geral do Core Data

Core Data é a estrutura de grafo de objetos e persistência da Apple. Ela gerencia o SQLite (ou outros armazenamentos) por meio de uma API orientada a objetos.

import CoreData
// Key classes: NSPersistentContainer, NSManagedObjectContext
// NSManagedObject, NSFetchRequest

Criando um NSPersistentContainer

Inicialize NSPersistentContainer com o nome do seu modelo .xcdatamodeld e carregue os armazenamentos persistentes.

let container = NSPersistentContainer(name: "MyModel")
container.loadPersistentStores { desc, error in
  if let error { fatalError("Core Data failed: \(error)") }
}

O padrão do Persistence Controller

Envolva o contêiner em uma estrutura PersistenceController singleton (ou injetável) para obter acesso organizado em todo o app.

struct PersistenceController {
  static let shared = PersistenceController()
  let container: NSPersistentContainer
  init() {
    container = NSPersistentContainer(name: "MyModel")
    container.loadPersistentStores { _, error in
      if let error { fatalError("\(error)") }
    }
  }
}

viewContext e backgroundContext

viewContext é o contexto da linha de execução principal para a interface. Use newBackgroundContext() para operações pesadas.

let viewCtx = PersistenceController.shared.container.viewContext
let bgCtx = PersistenceController.shared.container.newBackgroundContext()

Criando objetos gerenciados

Insira novos objetos usando NSEntityDescription.insertNewObject ou o inicializador da classe gerada.

let item = Item(context: viewCtx)
item.timestamp = Date()
try? viewCtx.save()

Buscando objetos

Use NSFetchRequest para consultar objetos do Core Data com predicados e descritores de ordenação.

let request: NSFetchRequest<Item> = Item.fetchRequest()
request.sortDescriptors = [NSSortDescriptor(key: "timestamp", ascending: false)]
let items = try? viewCtx.fetch(request)

Salvando o contexto

Sempre chame context.save() para persistir as alterações. Envolva a operação em um tratamento do-catch no código de produção.

do {
  try viewCtx.save()
} catch {
  print("Save failed: \(error)")
  viewCtx.rollback()
}

Integração com SwiftUI usando @FetchRequest

Use @FetchRequest nas visualizações SwiftUI para atualizar automaticamente a interface quando o Core Data mudar.

struct ItemList: View {
  @FetchRequest(
    sortDescriptors: [SortDescriptor(\Item.timestamp, order: .reverse)]
  ) var items: FetchedResults<Item>
  var body: some View {
    List(items) { Text($0.timestamp!.formatted()) }
  }
}

Injetando viewContext no SwiftUI

Passe viewContext pelo ambiente do SwiftUI para que as visualizações possam ler e gravar dados no Core Data.

@main
struct MyApp: App {
  let persistence = PersistenceController.shared
  var body: some Scene {
    WindowGroup {
      ContentView()
        .environment(\.managedObjectContext, persistence.container.viewContext)
    }
  }
}

Excluindo objetos

Chame context.delete(object) e depois salve para remover permanentemente um objeto.

viewCtx.delete(item)
try? viewCtx.save()

Armazenamento em memória para testes

Use um armazenamento em memória para evitar acessar o disco durante os testes unitários.

let desc = NSPersistentStoreDescription()
desc.type = NSInMemoryStoreType
container.persistentStoreDescriptions = [desc]
container.loadPersistentStores { _, _ in }

Verificação rápida

Qual contexto de NSPersistentContainer deve ser usado para leituras e gravações do Core Data orientadas pela interface?

Recapitulação da lição

Configure o Core Data com NSPersistentContainer, carregue os armazenamentos e envolva tudo em um PersistenceController. Use viewContext na linha de execução principal e newBackgroundContext() para tarefas pesadas. Integre-o ao SwiftUI por meio de @FetchRequest e da chave de ambiente do contexto de objetos gerenciados.

Perguntas Frequentes

A aula “Pilha do Core Data: configuração de NSPersistentContainer” é grátis?

Sim — o texto completo de “Pilha do Core Data: configuração de NSPersistentContainer” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.

O que vou aprender em “Pilha do Core Data: configuração de NSPersistentContainer”?

Configure o container persistente, o contexto e o coordinator em um aplicativo SwiftUI. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Swift Academy?

Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Pilha do Core Data: configuração de NSPersistentContainer”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Swift Academy?

Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Pilha do Core Data: configuração de NSPersistentContainer
  2. SwiftData @Model e ModelContext
  3. Relacionamentos e Fetch Descriptors
  4. Migrações leves e sincronização com CloudKit
← Voltar para Swift Academy