Сохранить большой объем данных в CoreData - PullRequest
0 голосов
/ 15 июня 2019

Я хочу сохранить большой объем данных в CoreData , ресурс моих данных в формате CSV .

Я знаю следующие способы достижения этого.

  1. С помощью Несколько MOC - я уже пробовал с этим, но это только поможет мне не заморозить мое приложение на Основной поток , На самом деле после заставки я хочу использовать эти данные также и в то время как данные сохраняются в фоновом потоке - шансы, что эти данные не будут немедленно отображены на требуемом экране ( На самом деле, даже если я столкнулся с этим, я не смог получить нужную сущность - возможно, все еще ее осталось сохранить в стеке CoreData? )
  2. Нужно ли конвертировать этот файл в plist расширение файл? Это хорошая идея для хранения большого количества данных в файле plist? И, к сожалению, я не смог найти ни одного онлайн-инструмента , который преобразует мой .csv файл в .plist файл? Я думаю, читая данные из plist не имеют большого значения.
  3. Предварительно загруженную базу данных необходимо импортировать в CoreData. Сейчас я работаю таким образом, я успешно преобразовал свой CSV-файл в файл SQLite и импортировал его в пакет, а затем скопировал из связать с каталогом документов, в то время как NSPersistentContainer будет инициализировать . Теперь у меня есть несколько вопросов по этому вопросу, как показано ниже.

    • Я нашел файл SQLite в каталоге документов, но на самом деле это просто копия существующих таблиц SQLite с моими объектами CoreData , Я хочу, чтобы одна из таблиц из существующего SQLite была merge с My CoreData Entity , мне нужно перебирать таблицу для каждого строка, а затем вручную сохранить его в Entity? Если так, то это то же самое Ситуация, как я уже упоминал в пункте 1.?
    • Где-то я обнаружил, что Структура БД CoreData и Структура БД SQLite отличаются, так что я сделал - я создал несколько фиктивных данных на CoreData и нашел файл SQLite, внутри этого файла SQLite я импортировано данных из CSV Table и теперь тот файл SQLite, который я использовал в комплекте приложений , я думаю, здесь я достиг чего-то, как я получил ошибка говорит миграция не удалась, так как таблица уже существует в базе данных , Не Мне нужно определить Entity сначала в DataModel ?, ИЛИ Не Мне нужно Создать таблицу внутри файла SQLite? ( Если так, то где я могу предварительно заполнить данные? )

Пожалуйста, предложите, что мне нужно сделать? И как мне этого добиться? Также было бы здорово, если бы вы предложили другие варианты сделать это.

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

Я думаю, что это плохое решение.Потому что у вас мало проблем
1) Ваша сборка будет больше по размеру - и вы не исправите это.И пользователь будет загружать приложение слишком долго.
2) В пакетном приложении у вас будет файл sqlite, это означает, что вы не сможете изменить эту базу данных во время выполнения.

Это можно исправить двумя способами:
1 способ - сделать два основных стека данных одним только для чтения, второе для чтения / записи с помощью sqlite в каталоге поддержки приложений.Но это усложняет работу с Core Data.И это доступно только в том случае, если вам не нужно изменять данные, хранящиеся в комплекте приложений.
2 способ - скопируйте файл sqlite в каталог приложения и работайте с этим.Но у вас будет две копии одного файла.

Если вы уверены, что таким образом
1) Вам нужно сделать простой парсер, который будет работать только в режиме дебага и симуляторе.
2) Вы должны настроить Core Data в режиме без журнала (нам нужен только файл sqlite)
Как отключить режим журнала WAL

options["journal_mode"] = "DELETE"

Дополнительная информация о режиме журнала
https://developer.apple.com/library/archive/qa/qa1809/_index.html

3) Разбор вашего scv и получение sqliteфайл в симуляторе
4) Добавить файл sqlite в свои ресурсы

Но я рекомендую делать запросы API, как отправлять данные в ваше приложение
1) Вы можете отправить какой-нибудь хэш или последнее обновление и получить только разностьданные (не все)
2) Вы можете запрашивать только данные о необходимости в данный момент с данными нумерации страниц и хэшем поддержки.

0 голосов
/ 18 июня 2019

Чтобы извлечь версию ваших файлов базы данных SQLite с учетом сущностей, вы можете запустить свое приложение в симуляторе и распечатать на консоли путь к созданному файлу.Затем с помощью Finder извлеките файл после того, как Core Data выполнит синтаксический анализ / сохранение всех записей.

Затем можно объединить сгенерированный файл SQLite в свои проекты и подготовить его к использованию.

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