Partilhar via


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:

Lista de exemplos do iOS

Detalhes de exemplo do iOS

O projeto do iOS é mostrado abaixo – o código mostrado nesta seção está contido no diretório Orm :

Árvore de projeto do iOS

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.