Лучший подход к добавлению модели CoreData в существующий проект с помощью пользовательских моделей в Swift - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть проект с существующими пользовательскими моделями, которые получают данные из API остальных (или nsurlcache) в формате JSON, но теперь мне нужно добавить модель CoreData. Я получаю противоречивую информацию о том, как лучше «объединить» мои модели с новыми CoreData NSManagedObject.

Какой самый разумный и чистый подход для этого?

Некоторые проблемы, с которыми я сталкиваюсь, состоят в том, что моя пользовательская модель сначала была / была структурой, а не классом, хотя это не такая большая проблема.

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

И, наконец, в целом, как мне поддерживать организованность моих моделей с этого момента? Должны ли все мои пользовательские функции храниться в моем собственном (не сгенерированном автоматически) файле расширения? Файлы расширения обычно создаются по одному на модель или кластер (если они короткие и связанные модели)? Нужно ли что-нибудь добавлять вручную в + CoreDataClass или + CoreDataProperties?

1 Ответ

0 голосов
/ 12 сентября 2018

Какова ваша противоречивая информация?

Вам нужно будет подумать о сценарии использования ваших сохраненных свойств.

Объекты CoreData поддерживают 2 различных типа: временные свойства (не будут храниться в постоянном хранилище) и непереходные свойства, которые будут храниться в постоянном хранилище.Таким образом, вы можете начать настройку дизайна вашей модели.Оба должны быть в модели.

Используйте больше вычисляемых свойств для вещей, которые не влияют на производительность вашего приложения.Те, которые вы можете положить в расширениях.Остальные должны быть в модели, рассчитанной один раз при импорте из вашего источника.

Вычисляемое свойство в вашем случае может выглядеть так: (учитывая, что у вас есть NSManaged var eventDate

var formattedEventDate: String? {
    let dateFormatter = DateFormatter()
    //... set desired format/locale
    return dateFormatter.string(from: eventDate)
}
...