Usando dados em um aplicativo iOS
O exemplo de DataAccess_Adv mostra um aplicativo de trabalho que permite a entrada do usuário e a funcionalidade de banco de dados CRUD (Criar, Ler, Atualizar e Excluir). O aplicativo consiste em duas telas: uma lista e um formulário de entrada de dados. Todo o código de acesso a dados é reutilizável no iOS e no Android sem modificação.
Depois de adicionar alguns dados, as telas do aplicativo se parecem com isso no iOS:
O projeto do iOS é mostrado abaixo – o código mostrado nesta seção está contido no diretório Orm :
O código nativo da interface do usuário para ViewControllers no iOS está fora do escopo deste documento. Consulte o guia trabalhando com tabelas e células do iOS para obter mais informações sobre os controles de interface do usuário.
Ler
Há algumas operações de leitura no exemplo:
- Lendo a lista
- Lendo registros individuais
Os dois métodos na StockDatabase
classe são:
public IEnumerable<Stock> GetStocks ()
{
lock (locker) {
return (from i in Table<Stock> () select i).ToList ();
}
}
public Stock GetStock (int id)
{
lock (locker) {
return Table<Stock>().FirstOrDefault(x => x.Id == id);
}
}
O iOS renderiza os dados de forma diferente como um UITableView
.
Criar e atualizar
Para simplificar o código do aplicativo, um único método de salvamento é fornecido que faz uma Inserção ou Atualização dependendo se a PrimaryKey foi definida. Como a Id
propriedade está marcada com um [PrimaryKey]
atributo, você não deve defini-la em seu código.
Esse método detectará se o valor foi salvo anteriormente (verificando a propriedade de chave primária) e inserirá ou atualizará o objeto de acordo:
public int SaveStock (Stock item)
{
lock (locker) {
if (item.Id != 0) {
Update (item);
return item.Id;
} else {
return Insert (item);
}
}
}
Os aplicativos do mundo real geralmente exigirão alguma validação (como campos necessários, comprimentos mínimos ou outras regras de negócios). Bons aplicativos multiplataforma implementam o máximo de lógica de validação possível no código compartilhado, passando erros de validação de volta para a interface do usuário para exibição de acordo com os recursos da plataforma.
Excluir
Ao contrário dos Insert
métodos e Update
, o Delete<T>
método pode aceitar apenas o valor da chave primária em vez de um objeto completo Stock
.
Neste exemplo, um Stock
objeto é passado para o método , mas apenas a propriedade Id é passada para o Delete<T>
método .
public int DeleteStock(Stock stock)
{
lock (locker) {
return Delete<Stock> (stock.Id);
}
}
Usando um arquivo de banco de dados SQLite pré-preenchido
Alguns aplicativos são enviados com um banco de dados já preenchido com dados. Você pode fazer isso facilmente em seu aplicativo móvel enviando um arquivo de banco de dados SQLite existente com seu aplicativo e copiando-o para um diretório gravável antes de acessá-lo. Como o SQLite é um formato de arquivo padrão usado em várias plataformas, há várias ferramentas disponíveis para criar um arquivo de banco de dados SQLite:
- Extensão firefox do SQLite Manager – funciona no Mac e no Windows e produz arquivos compatíveis com iOS e Android.
- Linha de comando – consulte www.sqlite.org/sqlite.html .
Ao criar um arquivo de banco de dados para distribuição com seu aplicativo, tome cuidado com a nomenclatura de tabelas e colunas para garantir que correspondam ao que seu código espera, especialmente se você estiver usando SQLite.NET que esperam que os nomes correspondam às suas classes e propriedades C# (ou aos atributos personalizados associados).
Para iOS, inclua o arquivo sqlite em seu aplicativo e verifique se ele está marcado com a Ação de Build: Conteúdo. Coloque o código no FinishedLaunching
para copiar o arquivo para um diretório gravável antes de chamar qualquer método de dados. O código a seguir copiará um banco de dados existente chamado data.sqlite, somente se ele ainda não existir.
// Copy the database across (if it doesn't exist)
var appdir = NSBundle.MainBundle.ResourcePath;
var seedFile = Path.Combine (appdir, "data.sqlite");
if (!File.Exists (Database.DatabaseFilePath))
{
File.Copy (seedFile, Database.DatabaseFilePath);
}
Qualquer código de acesso a dados (seja ADO.NET ou usando SQLite.NET) que for executado depois que isso for concluído terá acesso aos dados pré-preenchidos.