iOS coredata с использованием существующего SQLite? - PullRequest
0 голосов
/ 21 марта 2012

Я хочу создать новую таблицу в основных данных iOS, ранее я использовал следующий xml-файл для создания в java и хотел бы повторно использовать, если это возможно

файл sql.xml

<sql>
<statement>
CREATE TABLE IF NOT EXISTS place (
        _id INTEGER PRIMARY KEY AUTOINCREMENT, 
        Name VARCHAR(50), 
    Location VARCHAR(50),
    Description VARCHAR(300),  
    Type VARCHAR(50),
    longitude DOUBLE(50),
    latitude DOUBLE(50),
</statement>

 <statement>INSERT INTO place VALUES(1,'Clare'
     ,'Co Clare'
     ,'Clare Description'
     ,'County'
     ,'52.924014'
         ,'-9.353399')
 </statement>
 <statement>INSERT INTO surfSpot VALUES(2,'etc...

Java-код

 public void onCreate(SQLiteDatabase db){
      String s;
      try{
        InputStream in = context.getResources().openRawResource(R.raw.sql);
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document doc = builder.parse(in, null);
        NodeList statements = doc.getElementsByTagName("statement");
        for (int i=0; i<statements.getLength(); i++) {
            s = statements.item(i).getChildNodes().item(0).getNodeValue();
            db.execSQL(s);
        }
    } catch (Throwable t) {

    }
}

База данных статична, я хотел бы получить предложения о том, как сделать то же самое для iOS, пошаговые инструкции были бы идеальным ответом

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Боюсь, это не так, как работает Core Data. То, что он использует SQLite, является деталью реализации. На самом деле, даже не имеет для использования SQLite; Существуют и другие типы постоянных магазинов.

Вы можете вставить непосредственно в базу данных SQLite, которую создает Core Data. Я настоятельно рекомендую не делать этого. Это будет очень хрупким и может привести к сбою при обновлении основных версий.

Лучшим решением может быть непосредственное использование SQLite, полностью игнорируя основные данные. Базовые данные - отличная абстракция для большинства приложений, но не единственный и не лучший для всех случаев использования.

0 голосов
/ 21 марта 2012

Вы должны сначала признать, что Базовые данные не ядро ​​базы данных;это структура постоянства графов объектов.Один из постоянных типов хранилищ - хранилище sqlite.Поэтому такие термины, как «таблица», которые можно узнать в мире баз данных, нельзя передавать в Core Data, по крайней мере, на уровне абстракции, с которым вы будете работать в своем приложении.

Вы можете использовать существующий экспорт XMLзаполнить ваше постоянное хранилище Core Data;но следует понимать, что формат резервного хранилища sqlite непрозрачен - вам нужно будет найти его в файловой системе симулятора, а затем написать блок кода, который соединит существующий экспорт XML с постоянным хранилищем sqlite Core Data.Это будет гораздо больше проблем, чем стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...