Freigeben über


Verwenden von Daten in einer iOS-App

Das DataAccess_Adv Beispiel zeigt eine funktionierende Anwendung, die Benutzereingaben und CRUD-Datenbankfunktionen (Create, Read, Update and Delete) ermöglicht. Die Anwendung besteht aus zwei Bildschirmen: einer Liste und einem Dateneingabeformular. Der gesamte Datenzugriffscode ist in iOS und Android ohne Änderungen wiederverwendbar.

Nach dem Hinzufügen einiger Daten sehen die Anwendungsbildschirme unter iOS wie folgt aus:

iOS-Beispielliste

iOS-Beispieldetails

Das iOS-Projekt ist unten dargestellt: Der in diesem Abschnitt gezeigte Code ist im Verzeichnis Orm enthalten:

iOS-Projektstruktur

Der systemeigene UI-Code für die ViewControllers in iOS ist außerhalb des Geltungsbereichs für dieses Dokument. Weitere Informationen zu den Ui-Steuerelementen finden Sie im Leitfaden zum Arbeiten mit Tabellen und Zellen für iOS .

Lesen

Das Beispiel enthält mehrere Lesevorgänge:

  • Lesen der Liste
  • Lesen einzelner Datensätze

Die beiden Methoden in der StockDatabase -Klasse sind:

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

iOS rendert die Daten unterschiedlich als UITableView.

Erstellen und Aktualisieren

Um den Anwendungscode zu vereinfachen, wird eine einzelne Speichermethode bereitgestellt, die einen Insert- oder Update-Vorgang ausführt, je nachdem, ob der PrimaryKey festgelegt wurde. Da die Id Eigenschaft mit einem [PrimaryKey] Attribut gekennzeichnet ist, sollten Sie sie nicht im Code festlegen. Diese Methode erkennt, ob der Wert zuvor gespeichert wurde (durch Überprüfung der Primärschlüsseleigenschaft) und fügt das Objekt ein oder aktualisiert es entsprechend:

public int SaveStock (Stock item)
{
    lock (locker) {
        if (item.Id != 0) {
            Update (item);
            return item.Id;
    } else {
            return Insert (item);
        }
    }
}

Reale Anwendungen erfordern in der Regel eine gewisse Überprüfung (z. B. erforderliche Felder, Mindestlängen oder andere Geschäftsregeln). Gute plattformübergreifende Anwendungen implementieren so viel der validierungslogisch wie möglich in freigegebenem Code und übergeben Validierungsfehler zur Anzeige gemäß den Funktionen der Plattform an die Benutzeroberfläche.

Löschen

Im Gegensatz zu den Insert Methoden und Update kann die Delete<T> Methode nur den Primärschlüsselwert und nicht ein vollständiges Stock Objekt akzeptieren. In diesem Beispiel wird ein Stock -Objekt an die -Methode übergeben, aber nur die Id-Eigenschaft wird an die Delete<T> -Methode übergeben.

public int DeleteStock(Stock stock)
{
    lock (locker) {
        return Delete<Stock> (stock.Id);
    }
}

Verwenden einer vorab ausgefüllten SQLite-Datenbankdatei

Einige Anwendungen werden mit einer Datenbank ausgeliefert, die bereits mit Daten aufgefüllt ist. Sie können dies problemlos in Ihrer mobilen Anwendung erreichen, indem Sie eine vorhandene SQLite-Datenbankdatei mit Ihrer App senden und sie vor dem Zugriff in ein schreibbares Verzeichnis kopieren. Da SQLite ein Standarddateiformat ist, das auf vielen Plattformen verwendet wird, stehen eine Reihe von Tools zum Erstellen einer SQLite-Datenbankdatei zur Verfügung:

  • SQLite Manager Firefox-Erweiterung – Funktioniert auf Mac und Windows und erzeugt Dateien, die mit iOS und Android kompatibel sind.
  • Befehlszeile : Siehe www.sqlite.org/sqlite.html .

Wenn Sie eine Datenbankdatei für die Verteilung mit Ihrer App erstellen, achten Sie auf die Benennung von Tabellen und Spalten, um sicherzustellen, dass sie den Erwartungen Ihres Codes entsprechen, insbesondere wenn Sie SQLite.NET verwenden, die erwartet, dass die Namen Ihren C#-Klassen und -Eigenschaften (oder den zugehörigen benutzerdefinierten Attributen) entsprechen.

Fügen Sie für iOS die sqlite-Datei in Ihre Anwendung ein, und stellen Sie sicher, dass sie mit Buildaktion: Inhalt gekennzeichnet ist. Platzieren Sie den Code in der FinishedLaunching , um die Datei in ein beschreibbares Verzeichnis zu kopieren, bevor Sie Datenmethoden aufrufen. Mit dem folgenden Code wird eine vorhandene Datenbank namens data.sqlite nur dann kopiert, wenn sie noch nicht vorhanden ist.

// 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);
}

Jeder Datenzugriffscode (unabhängig davon, ob ADO.NET oder SQLite.NET verwendet), der nach Abschluss ausgeführt wird, hat Zugriff auf die vorab ausgefüllten Daten.