gpt4 book ai didi

swift - 一对多关系核心数据获取数据

转载 作者:行者123 更新时间:2023-11-28 14:59:28 25 4
gpt4 key购买 nike

关于这个主题有很多问题,但我无法解决。

在 vadian 的这个回答中,他通过两次重复循环获得了值:

  1. swift 3 - core data relationship - fetch data
  2. https://stackoverflow.com/a/43846785/8887336

它不适用于我的代码,我不明白为什么。

这是我的代码:

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'"
}
}
}
}

我得到错误:

Value of type 'Any' has no member '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?

}

还有一个关于谓词的问题。如果我像这样进行谓词提取:

fetch.predicate = NSPredicate(format: "name = %@", person1)

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

最佳答案

toHobbies 属性是 Any 的 NSSet,因此您需要对其或循环中的每个 x 进行类型转换。

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

关于swift - 一对多关系核心数据获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49075374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com