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!) } }