Как работать с извлеченными объектами Core Data - PullRequest
1 голос
/ 12 июля 2020

Когда я использую DataCore для хранения данных, существует пара ограничений, которые заставляют меня преобразовывать множество извлеченных объектов в объекты обычных классов, чтобы я мог регулярно работать с данными. Проблема в том, что такое поведение создает несколько посредственных строк кода.

Ограничения, с которыми я сталкиваюсь:

A. Отсутствие возможности создать объект с помощью конструктора, используя Init ()

B.Ограничение свойства, в частности, использование didSet {} при изменении свойства.

Например, вы не можете использовать didSet или создать конструктор в этом классе:

   extension Time {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Time> {
        return NSFetchRequest<Time>(entityName: "Time")
    }

    @NSManaged public var hours: Int
    @NSManaged public var minutes: Int
    
}

Как мне преодолеть эти два ограничения?

2. Кроме того, до сих пор я создавал объект сущности DataCore, используя этот вид кода:

let timeEntity = NSEntityDescription.entity(forEntityName: "Time", in: managedContext)!
    

let time = NSManagedObject(entity: timeEntity, insertInto: managedContext)
   time.setValue(10, forKeyPath: "hours")
   time.setValue(20, forKeyPath: "minutes")

Это подходящий способ создать объект в Core Data?

1 Ответ

0 голосов
/ 12 июля 2020

Чтобы сначала ответить на ваш второй вопрос, нет. Time является подклассом NSManagedObject. Вы можете использовать

let time = Time(context:managedContext)

Затем вы можете получить доступ к свойствам вашего time экземпляра:

time.hours = 10
time.minutes = 20

Чтобы ответить на ваш второй вопрос, я бы спросил, необходимо ли это; возможно, вы могли бы объяснить, что вы пытаетесь сделать.

Возможно, вы сможете добиться того же, что ищете, с помощью вычисляемого свойства, которое объединяет hour и minute.

...