#ios #swift #model-view-controller #core-data
Вопрос:
У меня есть класс с атрибутами (var и let) и методами. Для хранения данных я использую UserDefaults и пытаюсь использовать MVC. Теперь я хочу использовать CoreData. Я могу использовать сущность для хранения var, но куда мне поместить методы? Могут ли методы быть помещены в CoreData? Если нет, то где лучше разместить методы и логику работы с переменными? Помогите мне, пожалуйста)
class Statistics {
var defaults = UserDefaults.standard
var completed = 0
var launched = 0
var minutes = 0
var today = 0
var dateNew = 0
let calendar = Calendar.current
static var passedSecondsBackground = 0
static var didBackground = false
enum Keys: String {
case day = "PMDR.Day"
case week = "PMDR.Week"
case month = "PMDR.Month"
case year = "PMDR.Year"
case completed = "Completed"
case launched = "Launched"
case minutes = "Minutes"
}
var keyCompleted = Keys.completed.rawValue
var keyLaunched = Keys.launched.rawValue
var keyMinutes = Keys.minutes.rawValue
func checkDate(array: Array<Statistics>) {
for date in array {
date.dateNew = date.defaults.integer(forKey: "(date)")
if date.today != date.dateNew {
date.deleteScore(when: date)
date.defaults.set(date.today, forKey: "(date)")
date.dateNew = date.defaults.integer(forKey: "(date)")
}
}
}
func updateScore(array: Array<Statistics>) {
for date in array {
date.completed = date.defaults.integer(forKey: date.keyCompleted)
date.launched = date.defaults.integer(forKey: date.keyLaunched)
date.minutes = date.defaults.integer(forKey: date.keyMinutes)
}
}
/* etc... */
}
Ответ №1:
Есть два варианта.
- Если классы генерируются Xcode, поместите свою пользовательскую логику в расширения классов.
- Создайте классы самостоятельно (установив для Codegen значение Вручную/Нет и пункт меню Editor > Create NSManagedObject Subclass). Этот способ сложнее поддерживать, но вы можете настроить подклассы NSManagedObject, заменив необязательные типы необязательными, а тип
NSSet
отношений-собственнымSet
Комментарии:
1. Пожалуйста, скажите мне, могу ли я написать логику для записи и чтения из CoreData прямо в Расширении для этого класса (класс, созданный с помощью CoreData)?
2. Вы должны поместить логику для чтения и записи в класс контроллера.
3. Может быть, вы поможете мне еще с одним вопросом? В VC я запрашиваю методы в расширении (Stat) с помощью «var stat = Stat()» и получаю ошибку:
'[error] error: CoreData: error: Failed to call designated initializer on NSManagedObject class 'Stat' CoreData: error: CoreData: error: Failed to call designated initializer on NSManagedObject class 'Stat' '
Методы работают, но получают ошибку