Использование данных в приложении iOS
В примере DataAccess_Adv показано рабочее приложение, которое позволяет пользователям вводить данные и функции базы данных CRUD (создание, чтение, обновление и удаление). Приложение состоит из двух экранов: списка и формы ввода данных. Весь код доступа к данным можно повторно использовать в iOS и Android без изменений.
После добавления некоторых данных экраны приложения выглядят следующим образом в iOS:
Проект iOS показан ниже: код, показанный в этом разделе, содержится в каталоге Orm :
Код собственного пользовательского интерфейса для ViewControllers в iOS не область для этого документа. Дополнительные сведения об элементах управления пользовательского интерфейса см. в руководстве по работе с таблицами и ячейками iOS.
Чтение
В примере есть несколько операций чтения:
- Чтение списка
- Чтение отдельных записей
Два метода в StockDatabase
классе:
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 отображает данные по-другому UITableView
.
Создать и обновить
Чтобы упростить код приложения, предоставляется один метод сохранения, который выполняет вставку или обновление в зависимости от того, задан ли первичный ключ. Id
Так как свойство отмечено атрибутом[PrimaryKey]
, оно не должно быть задано в коде.
Этот метод определяет, сохранено ли значение (путем проверка свойства первичного ключа) и вставки или обновления объекта соответствующим образом:
public int SaveStock (Stock item)
{
lock (locker) {
if (item.Id != 0) {
Update (item);
return item.Id;
} else {
return Insert (item);
}
}
}
В реальных приложениях обычно требуется некоторая проверка (например, обязательные поля, минимальная длина или другие бизнес-правила). Хорошие кроссплатформенные приложения реализуют максимально логическую проверку в общем коде, передавая ошибки проверки в пользовательский интерфейс для отображения в соответствии с возможностями платформы.
Удаление
Insert
В отличие от методов и Update
методовDelete<T>
, метод может принимать только значение первичного ключа, а не полный Stock
объект.
В этом примере Stock
объект передается в метод, но в метод передается Delete<T>
только свойство Id.
public int DeleteStock(Stock stock)
{
lock (locker) {
return Delete<Stock> (stock.Id);
}
}
Использование предварительно заполненного файла базы данных SQLite
Некоторые приложения поставляются с базой данных, уже заполненной данными. Это можно легко сделать в мобильном приложении, отправив существующий файл базы данных SQLite с приложением и скопировав его в доступный для записи каталог перед доступом к нему. Так как SQLite — это стандартный формат файлов, используемый на многих платформах, существует ряд средств, доступных для создания файла базы данных SQLite:
- Расширение Firefox диспетчера SQLite — работает на Mac и Windows и создает файлы, совместимые с iOS и Android.
- Командная строка — см . www.sqlite.org/sqlite.html .
При создании файла базы данных для распространения с приложением обратите внимание на именование таблиц и столбцов, чтобы они соответствовали ожидаемому коду, особенно если вы используете SQLite.NET, которые будут ожидать, что имена будут соответствовать классам и свойствам C# (или связанным пользовательским атрибутам).
Для iOS включите в приложение файл sqlite и убедитесь, что он помечен действием сборки: содержимое. Поместите код в файл, чтобы скопировать его в FinishedLaunching
записываемый каталог перед вызовом любых методов данных. Следующий код копирует существующую базу данных с именем data.sqlite, только если она еще не существует.
// 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);
}
Любой код доступа к данным (будь то ADO.NET или с помощью SQLite.NET), который выполняется после завершения работы, будет иметь доступ к предварительно заполненным данным.