Лучший способ хранения сложных объектов Swift, который позволяет извлекать их и отправлять с приложением - PullRequest
0 голосов
/ 12 марта 2019

Я близок к завершению разработки приложения для создания музыки и хочу добавить возможность сохранять и загружать проекты / сеансы.Приложение построено на «циклической машине», которая хранит записанные заметки в многомерных массивах, и имеет множество параметров эффектов и других состояний, которые должны быть сохранены вместе с этими массивами.Это будет мой первый опыт работы с хранилищем данных в iOS, поэтому я ищу некоторые рекомендации о том, какая система может быть лучшей.

Я взглянул на CoreData, и кажется, что это займет очень много времени.время, чтобы получить эти данные в удобной форме для управляемых объектов.Realm кажется более простым вариантом, так как вы можете сохранять объекты «как есть», верно?Это подводит меня ко второй части вопроса: я хотел бы отправить некоторые заводские проекты с приложением - есть ли способ извлечь данные, сохраненные с помощью Realm (или другого метода), чтобы я мог отправить их с готовым приложениемдля загрузки пользователем?

Другое соображение - насколько сложно будет интегрировать систему хранения данных в существующий проект XCode.

Вот фрагмент машинного объекта цикла, который дает вамидея о том, почему я думаю, что CoreData будет неэффективным методом (есть несколько других больших классов, подобных этому):

open class LoopMachine {
   var delegate: LoopMachineDelegate!
   static let defaultTempo = 120
   static let numLoopsPerSource = 3
   static let minLoopLength = 4
   static let maxLoopLength = 32
   static let ticksPerBeat = 32
   var master: Master!
   var sources: Array<LoopSource?>!
   var activeSource = 0
   var beatsPerMeasure = 4
   var currentBeat = 1
   var currentTick = 1
   var metronome = AKMetronome()
   var metronomeOn = true
   var storedTempo: Int! // Used to store the current tempo when it is halved for easy rec mode
   var isPlaying = false
   var isRecording = false
   var countIn = true
   var countingIn = false
   let numSources = 12
   var quantization = 2 // How many ticks to quantize recorded notes to, min: 2 max: ticksPerBeat
   var quantizeNoteOnOnly = true
   var copiedLoop: Loop?
   var copiedLoopType: Int?

Это только моя вторая публикация, поэтому извиняюсь, если я что-то пропустил -просто дай мне знать.

1 Ответ

0 голосов
/ 12 марта 2019

Не ясно, сколько данных у вас будет, но в целом это звучит так, как будто вы должны смотреть на постоянство типа документа, а не на базу данных / Основные данные.Есть 1 файл на проект.

Кодовое предложение Мэтта - хорошее место, чтобы начать искать.

Сохраните ваши фабричные проекты в виде отдельных файлов и объедините их в виде ресурсов в приложении.

...