Обновите или удалите пользовательский объект в CoreData - PullRequest
0 голосов
/ 31 марта 2020

У меня есть проект, использующий CoreData, я создаю пользовательский объект Pi c Моего основного объекта данных

Это класс, который я использовал в атрибуте items

public class Item: NSObject, NSCoding {

public var name: String = ""
public var price: Int = 0
public var Quan: Int = 0

enum Key:String {
    case name = "name"
    case price = "price"
    case Quan = "Quan"
}

init(name: String, price: Int , Quan: Int) {
    self.name = name
    self.price = price
    self.Quan = Quan
}

public override init() {
    super.init()
}

public func encode(with aCoder: NSCoder) {

    aCoder.encode(name, forKey: Key.name.rawValue)
    aCoder.encode(price, forKey: Key.price.rawValue)
    aCoder.encode(Quan, forKey: Key.Quan.rawValue)
}

public required convenience init?(coder aDecoder: NSCoder) {

    let mName = aDecoder.decodeObject(forKey: Key.name.rawValue)
    let mPrice = aDecoder.decodeInt32(forKey: Key.price.rawValue)
    let mQuan = aDecoder.decodeInt32(forKey: Key.Quan.rawValue)

    self.init(name: mName as! String, price: Int(mPrice) , Quan: Int(mQuan) )
}
 }

Это мой код, когда я хочу сохранить и получить

func Save()

    {
    let UserEntity = NSEntityDescription.entity(forEntityName: "OrdersHistory", in: context)
    let cmsg = NSManagedObject(entity: UserEntity!, insertInto: context) as! OrdersHistory

    var itemarray : [Item] = []

    for i in self.items
     {
     itemarray.append(Item(name: String(i.item!), price: Int(i.price), Quan: Int(i.quan)))
      }

    let data = [ "orderunique" : uniq , "receiptnumber" : result[0] , "date" : NSDate() as Date , "items" : itemarray] as [String : Any]
    cmsg.setValuesForKeys(data)

    do
    {

        ad.saveContext()

        print("Saved! ")
    }
    catch
    {
        print(error)
    }

    }

   func fetch()
   {
    var HistoryList = [OrdersHistory]()
   let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "OrdersHistory")
    do 
    {
     HistoryList = try context.fetch(fetchRequest) as! [OrdersHistory]
    } catch 
     {
     }

    }

до сих пор все в порядке! , но когда я хочу обновить или удалить указанный c объект внутри [элемента], я пытаюсь использовать этот метод, но это неправильно, поскольку он может только удалить NSMangedObject

(Невозможно преобразовать значение введите «Item» для ожидаемого типа аргумента «NSManagedObject»). См. ниже. Я отмечаю, где ошибка:

func delete()
  {
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "OrdersHistory")

    fetchRequest.predicate = NSPredicate(format: "orderunique = %@", "\(orderdetail.orderunique!)")

     do 
    {
        let MainObject = try context.fetch(fetchRequest) as! [OrdersHistory]
        let ObjectToDelete = MainObject[0].items![0]
        context.delete(ObjectToDelete) //// Give me this error : Cannot convert value of type 'Item' to expected argument type 'NSManagedObject'
        }
    }

Примечание: ошибка отображается, если я хочу удалить все элементы или элемент из элементов

есть идеи?

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