簡體   English   中英

核心數據“對多”關系將 object 保存在字典中而不是集合中

[英]Core Data 'to-many' relationship save object in a dictionary not a set

我正在使用 Core Data 並一直在使用hackingWithSwift教程。 我有兩個具有一對多關系的實體。

  1. 國家實體
extension Country {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Country> {
        return NSFetchRequest<Country>(entityName: "Country")
    }

    @NSManaged public var id: UUID?
    @NSManaged public var fullName: String?
    @NSManaged public var shortName: String?
    @NSManaged public var candy: NSSet?
    
    public var wrappedShortName: String {
        shortName ?? "Unknown Country"
    }
    
    public var wrappedFullName: String {
        fullName ?? "Unknown Country"
    }
    
    public var candyArray: [Candy] {
        let set = candy as? Set<Candy> ?? []

        return set.sorted {
            $0.wrappedName < $1.wrappedName
        }
    }

}

// MARK: Generated accessors for candy
extension Country {
    
    @objc(addCandyObject:)
    @NSManaged public func addToCandy(_ value: Candy)

    @objc(removeCandyObject:)
    @NSManaged public func removeFromCandy(_ value: Candy)

    @objc(addCandy:)
    @NSManaged public func addToCandy(_ values: NSSet)

    @objc(removeCandy:)
    @NSManaged public func removeFromCandy(_ values: NSSet)
}
  1. 糖果實體
extension Candy {
    
    @nonobjc public class func fetchRequest() -> NSFetchRequest<Candy> {
        return NSFetchRequest<Candy>(entityName: "Candy")
    }
    
    @NSManaged public var id: UUID?
    @NSManaged public var name: String?
    @NSManaged public var origin: Country?
    
    public var wrappedName: String {
        name ?? "Unknown Candy"
    }
}

所以Country可以有很多Candy。

我想知道的是,當我創建一個 Candy 並保存它而不是添加到 Country 實體中 Candy 的 NSSet 時,是否有可能將它保存到 NSDictionary 或除 NSSet 之外的任何其他集合類型? 不確定我是否只是改變

    @objc(addCandy:)
    @NSManaged public func addToCandy(_ values: NSSet) //Change to NSDictionary

    @objc(removeCandy:)
    @NSManaged public func removeFromCandy(_ values: NSSet) //Change to NSDictionary

如果這可行,因為我希望 Entity id 屬性成為鍵,而 object 成為值。 不確定這是否可能。

這就是它們的添加方式

                    let candy3 = Candy(context: viewContext)
                    candy3.name = "Twix"
                    candy3.orgin = Country(context: viewContext)
                    candy3.orgin?.shortName = "UK"
                    candy3.orgin?.fullName = "United Kingdom"

                    let candy4 = Candy(context: viewContext)
                    candy4.name = "Toblerone"
                    candy4.orgin = Country(context: viewContext)
                    candy4.orgin?.shortName = "CH"
                    candy4.orgin?.fullName = "Switzerland"

                    try? viewContext.save()

如果這沒有意義,請提出任何問題。

您可以使用TransformableDictionary進行encodedecode ,但不能更改與字典的關系

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM