Swift 一对多关系核心数据获取数据

Swift 一对多关系核心数据获取数据,swift,core-data,one-to-many,Swift,Core Data,One To Many,关于这个话题有很多问题,但我无法让它发挥作用 在瓦迪安的回答中,他通过两个重复的循环得到值: 它对我的代码不起作用,我也不知道为什么 这是我的代码: import Foundation import CoreData struct HobbiesCollection { let typ: String let location: String } class LoadData{ class func load(context: NSManagedObjectContext)

关于这个话题有很多问题,但我无法让它发挥作用

在瓦迪安的回答中,他通过两个重复的循环得到值:

  • 它对我的代码不起作用,我也不知道为什么

    这是我的代码:

    import Foundation
    import CoreData
    
    struct HobbiesCollection {
      let typ: String
      let location: String
    }
    
    
    class LoadData{
      class func load(context: NSManagedObjectContext) {
        let persons = ["Owen", "Greg"]
        let futbal = HobbiesCollection(typ: "futbal", location: "stadium")
        let swimming = HobbiesCollection(typ: "swimming", location: "pool")
        let collection = [persons[0]: swimming, persons[1]: futbal]
    
        for x in collection {
          let person = Person(context: context)
          let hobbiesCD = Hobbies(context: context)
          person.name = x.key
          hobbiesCD.typ = x.value.typ
          hobbiesCD.location = x.value.location
    
          person.addToToHobbies(hobbiesCD)
    
          do {
            try context.save()
          } catch let error {
            print(error.localizedDescription)
          }
        }
    
        let fetch: NSFetchRequest<Person> = Person.fetchRequest()
        var result = [Person]()
        do {
          result = try context.fetch(fetch)
        } catch let error {
        print(error.localizedDescription)
        }
        for y in result {
          print("Persons:", y.name!)
          for x in y.toHobbies! {
            let location = x.location Error: "Value of type 'Any' has no member 'location'"
          }
        }
      }
    }
    
    <代码>导入基础 导入CoreData 结构HobbiesCollection{ let typ:String 让位置:字符串 } 类装入数据{ 类func加载(上下文:NSManagedObjectContext){ let persons=[“Owen”,“Greg”] let futbal=业余爱好者收藏(典型:“futbal”,位置:“体育场”) 让游泳=爱好收集(典型:“游泳”,位置:“游泳池”) let collection=[persons[0]:游泳,persons[1]:futbal] 对于集合中的x{ 让人=人(上下文:上下文) let hobbiesCD=爱好(上下文:上下文) person.name=x.key hobbiesCD.typ=x.value.typ 霍布斯cd.location=x.value.location person.AddToHobbies(霍布斯CD) 做{ 尝试context.save() }捕捉错误{ 打印(错误。本地化描述) } } 让fetch:NSFetchRequest=Person.fetchRequest() 变量结果=[Person]() 做{ 结果=try context.fetch(fetch) }捕捉错误{ 打印(错误。本地化描述) } 结果为y{ 打印(“人员:,y.name!”) 对于y中的x{ let location=x.location错误:“类型为'Any'的值没有成员'location'” } } } } 我得到一个错误:

    “Any”类型的值没有成员“location”

    我的两个核心数据类:

    extension Person {
    
        @nonobjc public class func fetchRequest() -> NSFetchRequest<Person> {
            return NSFetchRequest<Person>(entityName: "Person")
        }
    
        @NSManaged public var name: String?
        @NSManaged public var toHobbies: NSSet?
    
    }
    
    // MARK: Generated accessors for toHobbies
    extension Person {
    
        @objc(addToHobbiesObject:)
        @NSManaged public func addToToHobbies(_ value: Hobbies)
    
        @objc(removeToHobbiesObject:)
        @NSManaged public func removeFromToHobbies(_ value: Hobbies)
    
        @objc(addToHobbies:)
        @NSManaged public func addToToHobbies(_ values: NSSet)
    
        @objc(removeToHobbies:)
        @NSManaged public func removeFromToHobbies(_ values: NSSet)
    
    }
    extension Hobbies {
    
        @nonobjc public class func fetchRequest() -> NSFetchRequest<Hobbies> {
            return NSFetchRequest<Hobbies>(entityName: "Hobbies")
        }
    
        @NSManaged public var typ: String?
        @NSManaged public var location: String?
        @NSManaged public var toPerson: Person?
    
    }
    
    扩展人员{
    @nonobjc公共类func fetchRequest()->NSFetchRequest{
    返回NSFetchRequest(entityName:“个人”)
    }
    @NSManaged公共变量名称:字符串?
    @NSManaged public var:NSSet?
    }
    //标记:生成的访问器
    推广员{
    @objc(addToHobbiesObject:)
    @NSManaged public func addToToHobbies(uu值:嗜好)
    @objc(删除OBBIESOBJECT:)
    @NSManaged public func RemoveFromTo嗜好(u值:嗜好)
    @objc(addtocabbies:)
    @NSManaged public func ADDTOTOHOBIES(u值:NSSet)
    @objc(移除对象:)
    @NSManaged public func RemoveFromToHabiods(u值:NSSet)
    }
    扩展爱好{
    @nonobjc公共类func fetchRequest()->NSFetchRequest{
    返回NSFetchRequest(entityName:“爱好”)
    }
    @NSManaged公共变量类型:字符串?
    @NSManaged公共变量位置:字符串?
    @NSV管理的公共var toPerson:个人?
    }
    
    还有一个关于谓词的问题。 如果我执行如下谓词获取:

    fetch.predicate=NSPredicate(格式:“name=%@”,person1)


    如果在我的示例中我有多个嗜好,是否可以使用location=stadium(例如,使用第二个谓词参数)获取所有嗜好,而不是使用location=stadium of person1(具有for循环)查找这些嗜好?

    to嗜好属性是任意的NSSet,因此您需要键入它或循环中的每个x

    对于谓词,您可以使用“tocabiods.location=%@”之类的键路径