Começando com os dados principais! Difícil em palavras simples

Muitos tópicos já foram escritos com o Core Data, mas a maioria desses artigos está em inglês, além de usar muitas palavras "inteligentes" que podem confundir iniciantes.

Neste artigo, tentarei falar sobre essa estrutura da Apple em uma linguagem compreensível, para que até os programadores "menores" possam obter informações por si mesmos e obter a quantidade mínima de conhecimento que também os ajudará em seus projetos.

Offtopic pequeno


O Core Data é uma ferramenta muito poderosa que permite salvar dados em seu aplicativo e usá-los mais tarde. Neste artigo, NÃO falarei sobre como trabalhar com múltiplos contextos com a sincronização subsequente, como resolver problemas de migração e vários recursos avançados.

O público-alvo deste artigo são pessoas que geralmente não têm experiência com o Core Data.

Bem ... Vamos começar!


Para começar, você precisa criar o arquivo .xcdatamodeld, depois de abri-lo, na parte inferior da tela, você verá o botão "Adicionar entidade". Ao clicar nele, seu modelo de objeto será criado:



E agora, com mais detalhes:

  1. Sua entidade. Você pode pensar em Entidade como sua estrutura de dados, que tem herança de uma determinada classe - NSManagedObject, e também terá certos campos para gravar dados, mais sobre isso posteriormente.
  2. Attributes. Entity . + . :
    • Integer 16/32/64 — . , . Int, .
      : Integer16(15)
    • Decimal/Double/Float — . , .
    • String — .
    • Boolean — .
    • Date — Date.
      NOTE: Core Data 00:00:00 UTC 1 1970 .
    • Binary Data — Data
      NOTE: Allow External Storage. Core Data , 100 , Core Data . .
    • UUID — UUID.
    • URI — URL
    • Transformable — , NSCoding.

  3. Relationship. Entity. Relationships :

    1. One-to-One
    2. One-to-Many
    3. Many-to-Many

    Relationships.

    3 Entities, Andrey, Home, Car.

    • — One-to-One Relationship.
    • 1, 2 — One-to-Many Relationship.
    • Many-to-Many Relationship . .
  4. Entity
  5. Campo Codegen. Em resumo, esse campo indica quem governará a criação das classes NSManagedObject. Para facilitar a operação, selecione Manual / Nenhum ; em seguida, o Core Data poderá criar as classes necessárias para sua própria Entidade. Sobre isso abaixo.

Para criar nossa classe Entity, use:

Editor> Criar subclasse NSManagedObject.Se



desejar definir valores padrão para seus atributos, use o método:

public override func awakeFromInsert() {
        super.awakeFromInsert()
        date = Date()
}

Trabalhar com NSManagedObjectContext e PersistentStoreCoordinator


Hierarquia da pilha de dados principal:



em termos simples, todas as suas entidades são mostradas como objetos gerenciados no diagrama acima. Todos os nossos objetos gerenciados são armazenados no NSManagedObjectContext. Contexto Refere-se ao NSPersistentStoreCoordinator que armazena seus dados salvos como um Cache de Linha após acessar o SQL, mas esse não é o caso agora.

Para criar uma instância do seu ManagedObject (Entity), você deve consultar o NSPersistentContainer, que é um wrapper para o NSPersistentStoreCoordinator.

var persistentContainer: NSPersistentContainer = {
      let container = NSPersistentContainer(name: "SavingLearn")
      container.loadPersistentStores(completionHandler: { (storeDescription, error) in
          if let error = error as NSError? {
              fatalError("Unresolved error \(error), \(error.userInfo)")
          }
      })
      return container
  }()

Em seguida, precisamos acessar o NSManagedObjectContext por meio de nosso PersistentContainer:

var context: NSManagedObjectContext = {
    return persistentContainer.viewContext
  }()

Agora podemos criar uma instância do nosso ManageObject a partir do nosso contexto e atribuir um valor a ele:

var person = Person(context: context)
person.age = 32

Salvando Objeto


Para salvar, usamos uma função simples:

func saveContext () {
      if context.hasChanges {
          do {
              try context.save()
          } catch {
            context.rollback()
              let nserror = error as NSError
              fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
          }
      }
  }

No método acima, verificamos nosso contexto em busca de alterações e, se estiverem presentes, salvamos. Em caso de erro, o método é executado:

context.rollback()

rollback()
O método retorna nosso contexto ao seu estado original e cancela todas as alterações que foram feitas nele.

Excluir objeto

context.delete(object)

Permite remover facilmente um objeto do Core Data.
NOTA: Para que as alterações tenham efeito, é necessário salvar o contexto, caso contrário, todas as alterações não serão salvas.
context.save()

Recuperando todos os objetos


Para obter uma matriz de nossos objetos do Core Data, precisamos executar o NSFetchRequest. Não vou aprofundar todo o poder do FetchRequest, pois este artigo foi desenvolvido para iniciantes.

let fetchRequest: NSFetchRequest<Person> = Person.fetchRequest()
let objects = try context.fetch(fetchRequest)

Sob o capô, o NSFetchRequest faz um ótimo trabalho:

  1. NSFetchRequest vai para o coordenador de loja persistente
  2. Coordenador de loja persistente envia solicitação para loja persistente
  3. Persistent Store SQL
  4. SQL . ID Row Value. Row Value Persistent Store Row Cache ID.
  5. Persistent Store Managed Objects ID Persistent Store Coordinator. fault () . Managed Object Context ID, Core Data SQL.
  6. Persistent Store Coordinator context Managed Object
  7. Core Data .
    includePendingChanges = false
  8. NSManagedObject

NOTA: Enquanto o Contexto de Objeto Gerenciado NSFetchRequest estiver em execução e o Coordenador Persistente de Armazenamento estiver em execução em uma fila síncrona, todos os processos serão bloqueados enquanto outro processo estiver em execução.

Conclusão


Neste artigo, descrevi as informações mínimas necessárias para trabalhar com os Dados principais na minha opinião.

Agora você pode criar seus próprios modelos de dados, salvar, excluir e recuperá-los.

Se você estiver interessado em um tópico mais "avançado" sobre como trabalhar com o Core Data e dicas interessantes, escreva nos comentários e vou descobrir o que pode ser feito sobre isso. Feliz codificação!

All Articles