ios - Swift Core Data 多对多关系处理,代码生成为手动/无

标签 ios swift core-data many-to-many

enter image description here

我从愿望 list 到产品之间存在多对多关系。我将 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 设置为手动/无。

  1. 用户可以将产品添加到多个愿望 list

  2. 每个愿望 list 可以有多个产品。

最佳答案

将 Codegen 设置为“手动/无”后,您可以自由编写自己的实现让 Xcode 为您生成适当的子类。 (编辑器 -> 创建 NSManagedObject 子类...)所有帮助器方法都可以在那里轻松使用。 (假设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)

}

...产品及其愿望 list 反之亦然。

关于ios - Swift Core Data 多对多关系处理,代码生成为手动/无,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54840533/

相关文章:

iphone - 如何确定和解释 CGImage 的像素格式

objective-c - iPhone Cocos2D游戏编程教材中的循环引用

ios - 为什么这个最少的代码无法使用 OpenGL ES 1.1 绘制带纹理的三角形?

ios - Firebase 规则访问特定 child 的值(value)

multithreading - 核心数据专用队列死锁

ios - 如何在核心数据中存储audioPlayer实例的引用?

iphone - 在运行时修改 objective-c 中的常量

objective-c - 复制 Realm 对象而不添加到数据库

ios - 使用通知/提醒的待办事项列表应用程序

ios - 将 UISegmentedControl 的结果添加到核心数据实体中的属性