Быстрая обработка данных «многие ко многим» с помощью codegen как ручного / нет - PullRequest
0 голосов
/ 23 февраля 2019

enter image description here

У меня есть много ко многим отношениям от WishList до Product.Я установил свойство codegen как Manual / None , поэтому создал уважаемые классы, как показано ниже.

class Product: NSManagedObject {
  struct constants {
    static let ID = "id"
    static let NAME = "name"
    static let DESCRIPTION = "description"
    static let wishLists = "shoppingLists"
  }
}

extension Product {
 @NSManaged public var id: Int64
 @NSManaged public var name: String
 @NSManaged public var desc: String
 @NSManaged public var wishLists: NSOrderedSet?
}

class WishList: NSManagedObject {
  struct constants {
    static let ID = "id"
    static let NAME = "name"
    static let PRODUCT = "products"
   }

  func addProducts(_values : NSMutableOrderedSet) {

  }
  func removeProducts(_values : NSMutableOrderedSet) {

  }

  func addProduct(_values : Product) {

  }
  func removeProduct(_values : Product) {

  }
}

extension WishList {
   @NSManaged public var id: Int64
   @NSManaged public var name: String
   @NSManaged public var products: NSOrderedSet?
}

Что мне нужно, так это как реализовать удобные методы для достижения ниже функциональности, так какосновные данные не создаются от имени меня, потому что я сделал codegen как Manual / None.

  1. Пользователь может добавить товар в несколько списков желаний

  2. Каждый список пожеланий может иметь несколько товаров.

1 Ответ

0 голосов
/ 03 марта 2019

Если для Codegen установлено значение Manual / None, вы можете написать свою собственную реализацию или , чтобы Xcode мог создать для вас подходящий подкласс.(Editor -> Create NSManagedObject Subclass...) Все вспомогательные методы были бы легко доступны там.(при условии NSOrderedSet)

extension WishList {

    @objc(insertObject:inProductsAtIndex:)
    @NSManaged public func insertIntoProducts(_ value: Product, at idx: Int)

    @objc(removeObjectFromProductsAtIndex:)
    @NSManaged public func removeFromProducts(at idx: Int)

    @objc(insertProducts:atIndexes:)
    @NSManaged public func insertIntoProduct(_ values: [Product], at indexes: NSIndexSet)

    @objc(removeProductsAtIndexes:)
    @NSManaged public func removeFromProducts(at indexes: NSIndexSet)

    @objc(replaceObjectInProductsAtIndex:withObject:)
    @NSManaged public func replaceProducts(at idx: Int, with value: Product)

    @objc(replaceProductsAtIndexes:withProducts:)
    @NSManaged public func replaceProducts(at indexes: NSIndexSet, with values: [Product])

    @objc(addProductsObject:)
    @NSManaged public func addToProducts(_ value: Product)

    @objc(removeProductsObject:)
    @NSManaged public func removeFromProducts(_ value: Product)

    @objc(addProducts:)
    @NSManaged public func addToProducts(_ values: NSOrderedSet)

    @objc(removeProducts:)
    @NSManaged public func removeFromProducts(_ values: NSOrderedSet)

}

... и наоборот для Product и его wishlists.

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