Korzystanie z danych w aplikacji systemu iOS
W przykładzie DataAccess_Adv przedstawiono działającą aplikację, która umożliwia wprowadzanie danych przez użytkownika i operacje CRUD (tworzenie, odczytywanie, aktualizowanie i usuwanie). Aplikacja składa się z dwóch ekranów: listy i formularza wpisu danych. Cały kod dostępu do danych jest wielokrotnego użytku w systemach iOS i Android bez modyfikacji.
Po dodaniu niektórych danych ekrany aplikacji wyglądają następująco w systemie iOS:
Projekt systemu iOS jest pokazany poniżej — kod przedstawiony w tej sekcji znajduje się w katalogu Orm :
Natywny kod interfejsu użytkownika dla kontrolek widoków w systemie iOS jest poza zakresem tego dokumentu. Aby uzyskać więcej informacji na temat kontrolek interfejsu użytkownika, zapoznaj się z przewodnikiem Praca z tabelami i komórkami w systemie iOS.
Przeczytaj
W przykładzie istnieje kilka operacji odczytu:
- Odczytywanie listy
- Odczytywanie poszczególnych rekordów
Dwie metody w StockDatabase
klasie to:
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);
}
}
System iOS renderuje dane inaczej jako UITableView
.
Utwórz i aktualizuj
Aby uprościć kod aplikacji, podano pojedynczą metodę zapisywania, która wykonuje wstawianie lub aktualizowanie w zależności od tego, czy klucz podstawowy został ustawiony. Id
Ponieważ właściwość jest oznaczona atrybutem[PrimaryKey]
, nie należy go ustawiać w kodzie.
Ta metoda wykryje, czy wartość została wcześniej zapisana (sprawdzając właściwość klucza podstawowego) i odpowiednio wstaw lub zaktualizuje obiekt:
public int SaveStock (Stock item)
{
lock (locker) {
if (item.Id != 0) {
Update (item);
return item.Id;
} else {
return Insert (item);
}
}
}
Rzeczywiste aplikacje zwykle wymagają weryfikacji (takich jak wymagane pola, minimalne długości lub inne reguły biznesowe). Dobre aplikacje międzyplatformowe implementują jak najwięcej logicznej weryfikacji, jak to możliwe w udostępnionym kodzie, przekazując błędy walidacji z kopii zapasowej do interfejsu użytkownika do wyświetlania zgodnie z możliwościami platformy.
Delete
Insert
W przeciwieństwie do metod Delete<T>
i Update
metoda może akceptować tylko wartość klucza podstawowego, a nie kompletny Stock
obiekt.
W tym przykładzie Stock
obiekt jest przekazywany do metody, ale tylko właściwość Id jest przekazywana Delete<T>
do metody.
public int DeleteStock(Stock stock)
{
lock (locker) {
return Delete<Stock> (stock.Id);
}
}
Używanie wstępnie wypełnionego pliku bazy danych SQLite
Niektóre aplikacje są dostarczane z bazą danych już wypełnioną danymi. Można to łatwo osiągnąć w aplikacji mobilnej, wysyłając istniejący plik bazy danych SQLite z aplikacją i kopiując go do zapisywalnego katalogu przed uzyskaniem do niego dostępu. Ponieważ SQLite to standardowy format pliku używany na wielu platformach, istnieje wiele narzędzi dostępnych do utworzenia pliku bazy danych SQLite:
- SqLite Manager Firefox Extension — działa na komputerach Mac i Windows i tworzy pliki zgodne z systemami iOS i Android.
- Wiersz polecenia — zobacz www.sqlite.org/sqlite.html .
Podczas tworzenia pliku bazy danych do dystrybucji z aplikacją należy zadbać o nazewnictwo tabel i kolumn, aby upewnić się, że pasują one do oczekiwanego kodu, zwłaszcza jeśli używasz SQLite.NET, które będą oczekiwać, że nazwy będą zgodne z klasami i właściwościami języka C# (lub skojarzonymi atrybutami niestandardowymi).
W przypadku systemu iOS dołącz plik sqlite do aplikacji i upewnij się, że jest on oznaczony akcją kompilacji: zawartość. Umieść kod w pliku FinishedLaunching
, aby skopiować plik do katalogu zapisywalnego przed wywołaniem dowolnych metod danych. Poniższy kod skopiuje istniejącą bazę danych o nazwie data.sqlite tylko wtedy, gdy jeszcze nie istnieje.
// 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);
}
Każdy kod dostępu do danych (niezależnie od tego, czy ADO.NET, czy przy użyciu SQLite.NET), który zostanie wykonany po zakończeniu tego działania, będzie miał dostęp do wstępnie wypełnionych danych.