Swift core data change bool хранится - PullRequest
0 голосов
/ 19 июня 2020

Я создаю и расширяю приложение для списков и добавляю дополнительные данные как I go. Я добавил bool, чтобы пометить элемент как завершенный.

Я хочу изменить значение bool, хранящегося в основных данных. Я могу добавлять и удалять заказы, но теперь хочу изменить свойства. Пожалуйста, могу ли я найти лучший способ изменить их?

class CoreDataManager {

static let shared = CoreDataManager(moc: NSManagedObjectContext.current)

var moc: NSManagedObjectContext

private init(moc: NSManagedObjectContext) {
    self.moc = moc
}

private func fetchOrder(name: String) -> Order? {

    var orders = [Order]()

    let request: NSFetchRequest<Order> = Order.fetchRequest()
    request.predicate = NSPredicate(format: "name == %@", name)

    do {
        orders = try self.moc.fetch(request)
    } catch let error as NSError {
        print(error)
    }

    return orders.first

}

func changeCompleated(name:String, completed: Bool) {
      do {
        if let order = fetchOrder(name: name) {
            self.moc.perform {

            }
                 try self.moc.save()
             }
         } catch let error as NSError {
             print(error)
         }
}

func deleteOrder(name: String) {

    do {
        if let order = fetchOrder(name: name) {
            self.moc.delete(order)
            try self.moc.save()
        }
    } catch let error as NSError {
        print(error)
    }

}

func getAllOrders() -> [Order] {

    var orders = [Order]()

    let orderRequest: NSFetchRequest<Order> = Order.fetchRequest()

    do {
        orders = try self.moc.fetch(orderRequest)
    } catch let error as NSError {
        print(error)
    }

    return orders

}

func saveOrder(id: UUID, name: String, type: String, qty: Double, urgent: Bool, complete: Bool) {

    let order = Order(context: self.moc)
    order.id = id
    order.name = name
    order.type = type
    order.qty = qty
    order.urgent = urgent
    order.complete = complete

    do {
        try self.moc.save()
    } catch let error as NSError {
        print(error)
    }   
}

}

1 Ответ

0 голосов
/ 19 июня 2020

Почти, просто добавьте строку для изменения значения, блок perform не нужен

func changeCompleated(name: String, completed: Bool) {

    guard let order = fetchOrder(name: name) else { return }
    do {
       order.complete = completed
       try self.moc.save()
    } catch {
       print(error)
    }
}

А еще можно сократить fetchOrder

private func fetchOrder(name: String) -> Order? {

    let request: NSFetchRequest<Order> = Order.fetchRequest()
    request.predicate = NSPredicate(format: "name == %@", name)

    do {
        return try self.moc.fetch(request).first
    } catch {
        print(error)
    }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...