Prática 1: Criação do Modelo

Assista e acompanhe a prática em sala dos exercícios "Criação do Modelo". Execute as instruções conforme a apresentação.

Exercício 1: Criando o Modelo do Core Data

1.1. Crie o arquivo Data Model do Projeto Traqt

No grupo Model do projeto inclua um novo arquivo do tipo Data Model (Grupo iOS / Core Data) com o nome Traqt.

1.2. Explorar o modelo.


Exercício 2: Criar a entidade de ativadades

2.1. Adicionar a entidade de atividades no arquivo Traqt.xcdatamodel

Abra o arquivo Traqt.xcdatamodel no editor padrão do Xcode. Acrescente uma entidade e renomeie para Activity.

2.2. Adicione os atributos da entidade

Adicione os atributos da entidade conforme a tabela abaixo:

Atributo Tipo Default Descrição
activityId String - Campo para identificar o registro na entidade.
name String - Nome que identifica a atividade para o usuário.
details String - O usuário pode digitar detalhes sobre a atividade.
enableVibration Boolean YES Configura se as vibrações estão habilitadas por padrão.
listOrder Integer 32 0 Ordem em que a atividade é apresentada em uma listagem.
reminders Booleans NO Será utilizada em um módulo futuro na funcionalidade de lembretes.
reminderDays Integer 32 - Será utilizada em um módulo futuro na funcionalidade de lembretes.
reminderTime Integer 32 - Será utilizada em um módulo futuro na funcionalidade de lembretes.
repetitions Integer 32 0 Quantidade de repetições máximas dessa atividade.
timeLimit Float 0 Limite de tempo da atividade, em segundos.

Exercício 3: Criar a entidade de Sessões

3.1. Adicionar a entidade de sessões no arquivo Traqt.xcdatamodel

Abra o arquivo Traqt.xcdatamodel no editor padrão do Xcode. Acrescente uma entidade e renomeie para Session.

3.2. Adicione os atributos da entidade

Adicione os atributos da entidade conforme a tabela abaixo:

Atributo Tipo Default Descrição
sessionId String - O identificador único do registro daquela sessão.
startTime Date - O horário em que a sessão foi iniciada.
endTime Date - O horário em que a sessão foi concluída.
elapsedTime Float 0 Representa o tempo transcorrido na sessão em segundos.
sessionOutcome Integer 32 0 Representa o status em que a sessão terminou (0 - Concluída, 1 - Cancelada)
totalRepetitions Integer 32 0 Quantidade total de repetições na sessão.

Exercício 4: Incluir o relacionamento entre as entidades

4.1. Adicione um relacionamento de Sessões na entidade de Atividades

Abra o arquivo Traqt.xcdatamodel e selecione a entidade Activity. Adicione um novo relacionamento com o nome sessions

Configure para que seu destination seja a entidade Session e que o seu tipo seja Too Many.

4.2. Adicione um relacionamento de Atividade na entidade de Sessão

Abra o arquivo Traqt.xcdatamodel e selecione a entidade Session. Adicione um novo relacionamento com o nome activity

Configure para que seu destination seja a entidade Activity e que o seu tipo seja Too One.


Exercício 5: Criar as classes derivadas de NSManagedObject

5.1. Criar as classe derivadas de NSManagedObject para as entidades Activity e Session.


Exercício 6: Integrar o componente SwiftyIO

6.1. Baixe o componente SwiftyIO

Baixe o componente SwiftyIO a partir deste link e descompacte em algum local do seu computador.

6.2. Adicione a componente no projeto

Adicione a biblioteca ao projeto arrastando a pasta SwiftyIO para dentro do grupo Libs, mantendo as opções:

  • Destination: Copy Items if needed - deixar marcado
  • Added folders - selecionar a opção Create Groups
  • Add to Targets - Selecionar o target Traqt

6.3. Criar o TraqtDataContext

No grupo model crie um novo arquivo com o template Cocoa Touch Class, com o nome TraqtDataContext como subclasse de BaseDataContext na linguagem Swift.

6.4. Importar biblitoecas no arquivo

Selecione o arquivo TraqtDataContext.swift e substitua a declaração de importação de classes do topo pelo código abaixo:

import Foundation
import CoreData

6.5. Incluir a declaração do Singleton

Na classe TraqtDataContext inclua o código abaixo logo no início:

//
// MARK: - Singleton

class var sharedInstance: TraqtDataContext {
    struct Singleton {
        static var instance: TraqtDataContext?
        static var token: dispatch_once_t = 0
    }

    dispatch_once(&Singleton.token) {
        Singleton.instance = TraqtDataContext()
    }

    return Singleton.instance!
}

//
// MARK: - Initializers

init() {
    super.init(resourceName: "Traqt")
}

Esse código deve estar aninhado a declaração da classe.

6.6. Incluir as declarações das constantes

No ínicio do arquivo TraqtDataContext.swift incluir as seguintes declarações após a importação das bibliotecas:

//
// MARK: - Constants

let ENTITY_ACTIVITY_NAME = "Activity"
let ENTITY_ACTIVITY_KEY = "activityId"
let ENTITY_SESSION_NAME = "Session"
let ENTITY_SESSION_KEY = "sessionId"

6.7. Adicione as propriedades para as entidades

Na classe TraqtDataContext adicione uma sessão de propriedades abaixo da sessão Singleton usando o código abaixo:

//
// MARK: - Entity Data Sources

var activities: EntityDataSource<Activity>!
var sessions: EntityDataSource<Session>!

6.8. Incluir a inicialização dos Data Sources

Inclua o código para inicialização das data sources no inicializador da classe TraqtDataContext, conforme o código abaixo:

init() {
    super.init(resourceName: "Traqt")

    if let moc = self.managedObjectContext {
        self.activities = EntityDataSource(managedObjectContext: moc,
            entityName: ENTITY_ACTIVITY_NAME, entityKeyName: ENTITY_ACTIVITY_KEY, entityKeyGeneration: .UUID)
        self.sessions = EntityDataSource(managedObjectContext: moc,
            entityName: ENTITY_SESSION_NAME, entityKeyName: ENTITY_SESSION_KEY, entityKeyGeneration: .UUID)
    }
}

6.9. Inclua o método para adicionar dados de exemplo

Na classe TraqtDataContext inclua o método do código abaixo em uma seção no final do arquivo:

/**
    Insere um conjunto de dados de teste caso.
 */
func fillInitialData() {
    // Verifica se existem atividades
    if activities.count(nil) == 0 {
        // Insere algumas atividades de testes
        activities.add() {
            $0.name = "Mantras"
            $0.enableVibration = true
            $0.timeLimit = NSTimeInterval(300)
            $0.repetitions = 10
        }
        activities.add() {
            $0.name = "Caminhada"
            $0.timeLimit = NSTimeInterval(5000)
        }
        activities.add() {
            $0.name = "Abdominais"
            $0.enableVibration = true
            $0.repetitions = 150
        }
    }
}

6.10. Atualize o inicializador para chamar o método inserido

Na classe TraqtDataCotnext atualize seu inicializador para incluir uma chamada ao método inserido, conforme o código abaixo:

init() {
    super.init(resourceName: "Traqt")

    // Código existente
    // ...

    self.fillInitialData()
}

6.11. Inclua a listagem dos registros no Log

Para fins de testes, no arquivo ViewController.swift localize o método viewDidLoad e inclua o código abaixo:

override func viewDidLoad() {
    super.viewDidLoad()

    // Código existente
    // ...

    // Visualizar os registros de atividades no modelo de dados
    let activities = TraqtDataContext.sharedInstance.activities.getAll()
    for activity in activities {
        NSLog("Atividade: %@", activity.name!)
    }
}