[英]Core Data 'to-many' relationship save object in a dictionary not a set
我正在使用 Core Data 並一直在使用hackingWithSwift教程。 我有兩個具有一對多關系的實體。
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)
}
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()
如果這沒有意義,請提出任何問題。
您可以使用Transformable
對Dictionary
進行encode
和decode
,但不能更改與字典的關系
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.