Как получить специфицированный атрибут c в ядре быстрых данных - PullRequest
0 голосов
/ 19 февраля 2020

Я знаю, что есть похожие вопросы, но я потратил часы, пытаясь найти соответствующий результат для моей ситуации без успеха.

У меня есть одна сущность: EntityDate.
У сущности есть 2 атрибута: дата и время

У меня есть переменная «дата», которую я сохраняю в виде строки для основных данных, например:



addToCoreData(name: getDateFormatted(), entityName: "EntityDate", key: "date")


func addToCoreData(name: String, entityName: String, key: String)  {
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    let entity = NSEntityDescription.entity(forEntityName: entityName, in: context)
    let newEntity = NSManagedObject(entity: entity!, insertInto: context)

    newEntity.setValue(name, forKey: key)

    do {

        try context.save()
        print("saved")

    } catch {
        print("Failed saving")
    }

}


Позже в моем коде я получаю такие данные:


var dateFromCD = getCoreData(Entity: "EntityDate")

func getCoreData(Entity: String) -> Array<NSManagedObject>{

    var coreData= [NSManagedObject]()
    coreData= []

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: Entity)
    request.returnsObjectsAsFaults = false

    do {
        let result = try context.fetch(request)
        for data in result as! [NSManagedObject]
        {

            coreData.append(data)

        }
    } catch {
        print("Failed")
    }

    return coreData

}



Теперь я думал, что добавлю переменное время к отдельному атрибуту «время», и, естественно, я поступил так:

addToCoreData(name: getFormattedTime(), entityName: "EntityDate", key: "time")

Проблема, с которой я столкнулся, заключается в том, что вызов функции "getCoreData (Entity:" EntityDate ")", она дает мне такой вывод

[<EntityDate: 0x6000034fc2d0> (entity: EntityDate; id: 0xc229f3dcff76efb1 <x-coredata://2E6F1D46-F49D-436C-9608-FEC59EEB21E6/EntityDate/p18>; data: {
    date = "2/21/20";
    time = nil;
}), <EntityDate: 0x6000034fc320> (entity: EntityDate; id: 0xc229f3dcff72efb1 <x-coredata://2E6F1D46-F49D-436C-9608-FEC59EEB21E6/EntityDate/p19>; data: {
    date = nil;
    time = "13:46";
})]

Я не понимаю вывод, и я хотел бы иметь возможность получить только дату и время как две отдельные переменные из массива.

1 Ответ

1 голос
/ 19 февраля 2020

Проблема в том, что вы создаете две записи, одна с date, а другая с информацией time вместо одна с обоими date и time.

Если у вас есть только одна сущность, воспользуйтесь поведением generi c и напишите метод более детально c наподобие

func createEntityDate(date: String, time: String)  {
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    let newEntity = EntityDate(context: context)
    newEntity.date = date
    newEntity.time = time

    do {
        try context.save()
        print("saved")

    } catch {
        print("Failed saving", error)
    }

}

Если вам нужно изменить атрибуты существующей записи вы должны извлечь ее, изменить и сохранить обратно.

В любом случае настоятельно рекомендуется сохранить всю дату как Date и использовать вычисленные свойства для извлечения date и time часть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...