Использование данных в приложении iOS

В примере DataAccess_Adv показано рабочее приложение, которое позволяет пользователям вводить данные и функции базы данных CRUD (создание, чтение, обновление и удаление). Приложение состоит из двух экранов: списка и формы ввода данных. Весь код доступа к данным можно повторно использовать в iOS и Android без изменений.

После добавления некоторых данных экраны приложения выглядят следующим образом в iOS:

iOS sample list

iOS sample detail

Проект iOS показан ниже: код, показанный в этом разделе, содержится в каталоге Orm :

iOS project tree

Код собственного пользовательского интерфейса для 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), который выполняется после завершения работы, будет иметь доступ к предварительно заполненным данным.