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=%@”之类的键路径