- NSPersistentContainer – Uma estranha classe com todos os recursos para trabalhar com os Dados do Núcleo chamado de Núcleo de Dados pilha.
- NSManagedObjectContext-espaço para gerar, armazenar e recuperar dados.Efectuar operações a partir deste objecto. Há uma propriedade chamada viewContext dentro do nspersisitentcontainer, então você não tem que fazê-la você mesmo.
- NSFetchRequest-o objeto que você precisa criar para obter os dados.
- NSEntityDescription – Entityのララス.Entityは、*.A entidade no ficheiro xcdatamodeld.
- DataController-uma classe personalizada para lidar com o acima together.It será explicado abaixo.
(para referência) Classes que precisam ser tocado antes de iOS 10
- NSPersistentStoreCoordinator – uma pessoa que tenha um armazenamento (chamado de armazenamento Persistente) para armazenamento de dados e o Objeto Gerenciado Contexto mencionado acima.
Política
Eu acho que seria mais fácil de lidar se você criar uma classe chamada DataController
e torná-lo completo nele.
If you check “Use Core Data” when creating a new project, AppDelegate.Na swift, Núcleo relacionadas a Dados de código é adicionado, mas ele tem acesso AppDelegate um por um, e é confuso, misturado com o código original do AppDelegate, assim também está escrito no documento que é melhor para colocá-lo juntos em uma classe (veja aqui)
inicialização
DataController de inicialização de classe
DataController de inicialização de classe
DataController de inicialização de classe
DataController de inicialização de classe
DataController de inicialização de classe
DataController de inicialização de classe inicialização parecido com este:"DataModel"
é diferente para cada projecto, de modo a alterá-lo de acordo.Especificamente, a extensão .xcdatamodeld
.
import UIKitimport CoreDataclass DataController: NSObject { var persistentContainer: NSPersistentContainer! init(completionClosure: @escaping () -> ()) { persistentContainer = NSPersistentContainer(name: "DataModel") persistentContainer.loadPersistentStores() { (description, error) in if let error = error { fatalError("Failed to load Core Data stack: \(error)") } completionClosure() } } // 以下もっと追加していくよー}
Este é o momento para gerar o DataController, mas vou tentar no início do AppDelegate por agora.
Create and save Managed object
func createEmployee() -> EmployeeMO { let context = persistentContainer.viewContext let employee = NSEntityDescription.insertNewObject(forEntityName: "Employee", into: context) as! EmployeeMO return employee}
subclassing NSManagedObject
Subclasses permitem o acesso directo às propriedades (atributos).
no Xcode 9, Ele é criado automaticamente quando você adiciona entidade, então você pode não ter que escrevê-lo você mesmo a menos que você faça processamento especial.
class EmployeeMO: NSManagedObject { @NSManaged var name: String?}
Salvar NSManagedObject exemplo
func saveContext() { let context = persistentContainer.viewContext if context.hasChanges { do { try context.save() } catch { // Replace this implementation with code to handle the error appropriately. // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. let nserror = error as NSError fatalError("Unresolved error \(nserror), \(nserror.userInfo)") } }}
load NSManagedObject instance
Create NSFetchRequest object and set context.Liga para o fetch.
func fetchEmployees() -> { let context = persistentContainer.viewContext let employeesFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Employee") do { let fetchedEmployees = try context.fetch(employeesFetch) as! return fetchedEmployees } catch { fatalError("Failed to fetch employees: \(error)") } return }
filtrar o resultado
let employeesFetch = ...
Adicionar após isso para obter o resultado filtrado.
let firstName = "Trevor"employeesFetch.predicate = NSPredicate(format: "firstName == %@", firstName)
além de estreitar o resultado, você também pode especificar para retornar um Dicionário em vez de NSManagedObject.Você também pode especificar que o dicionário contém apenas certas propriedades da entidade.
criando e modificando objetos gerenciados personalizados
no Xcode 8, iOS 10 e mais tarde, quando você cria um modelo de dados de base no Xcode, uma subclasse ou extensão do NSManagedObject é gerado automaticamente.Estes arquivos não estão incluídos no projeto e são criados no tempo de construção (veja aqui).