При загрузке NSManagedObject из Core Data я получаю его детей бесплатно? - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь узнать, как использовать этот новый модный шаблон отношений в базовых данных для эмуляции массива String.У меня есть объект Alarm и объект NotificationUuid.Alarm является родительским объектом NotificationUuid, потому что у Alarm может быть много NotificationUuids, а у NotificationUuid может быть только один родительский Alarm.У меня все это настроено в моем файле .xcdatamodeld.

Мой вопрос таков: когда я получаю родительский объект Alarm, как это:

private func loadAlarms() {

    os_log("loadAlarms() called", log: OSLog.default, type: .debug)
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
            return
    }
    let managedContext = appDelegate.persistentContainer.viewContext
    let fetchRequest = NSFetchRequest<AlarmMO>(entityName: "Alarm")

    do {
        if self.alarms.count == 0 {
            self.alarms = try managedContext.fetch(fetchRequest)
            os_log("Loading %d alarms", log: OSLog.default, type: .debug, self.alarms.count)
        } else {
            os_log("Didn't need to load alarms", log: OSLog.default, type: .debug)
        }
    } catch let error as NSError {
        print("Could not fetch alarms. \(error), \(error.userInfo)")
    }

}

я получаю AlarmMO (Alarm ManagedОбъект) потомки объекта, объекты NotificationUuid, бесплатно?Или мне теперь тоже нужно настроить запрос на выборку?Как работают все эти необычные отношения между родителями и детьми, и как мне устанавливать / загружать вещи из этих объектов?

Спасибо

Вот как я определил AlarmMO:

import CoreData

@objc(AlarmMO)
public class AlarmMO: NSManagedObject {

    @NSManaged public var alarmNumber: Int64
    @NSManaged public var alarmTime: NSDate?
    @NSManaged public var endTimeInterval: Double
    @NSManaged public var recurrence: Int64
    @NSManaged public var startTimeInterval: Double
    @NSManaged public var notificationUuidChildren: NSSet?


}

// MARK: Generated accessors for notificationUuidChildren
extension AlarmMO {

    @objc(addNotificationUuidChildrenObject:)
    @NSManaged public func addToNotificationUuidChildren(_ value: NotificationUuidMO)

    @objc(removeNotificationUuidChildrenObject:)
    @NSManaged public func removeFromNotificationUuidChildren(_ value: NotificationUuidMO)

    @objc(addNotificationUuidChildren:)
    @NSManaged public func addToNotificationUuidChildren(_ values: NSSet)

    @objc(removeNotificationUuidChildren:)
    @NSManaged public func removeFromNotificationUuidChildren(_ values: NSSet)

}

и NotificationUuidMO:

import CoreData

@objc(NotificationUuid)
public class NotificationUuidMO: AlarmMO {

    @NSManaged public var notificationUuid: String
    @NSManaged public var alarmParent: AlarmMO

}

1 Ответ

0 голосов
/ 04 декабря 2018

При просмотре модели AlarmMO вы можете просто выбрать модель AlarmMO, которая будет содержать список NotificationUuidMO в наборе notificationUuidChildren.Поэтому нет необходимости извлекать NotificationUuidMO отдельно.

И AlarmMO для NotificationUuidMO является отношением один ко многим.Таким образом, вы можете получить notificationUuidChildren от AlarmMO и alarmParent от NotificationUuidMO.

Чтобы добавить NotificationUuidMO к notificationUuidChildren Set, вы можете использовать сгенерированные Core-Data средства доступа, указанные в extension AlarmMO.

Пример:

let notificationUuid = NotificationUuidMO....
let alarmMO = AlarmMO....

alarmMO.addToNotificationUuidChildren(notificationUuid)//Here your notificationUuid will be added to `notificationUuidChildren` Set and `alarmParent` of your `notificationUuid` will be automatically assigned to `alarmMO`.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...