kak*_*bei 7 nsfetchedresultscontroller ios swift
对核心数据很新,但我读过我可以获取使用实体关系的数据.现在,来自Mysql可能我做了太多的假设,但我有2个实体设置了它们之间的关系,我无法获取正确的数据.
这是我的2个型号:
@objc(Categories)
class Categories: NSManagedObject {
@NSManaged var category: String
@NSManaged var exp: String
@NSManaged var order: NSNumber
}
@objc(Techniques)
class Techniques: NSManagedObject {
@NSManaged var korean: String
@NSManaged var order: NSNumber
@NSManaged var spanish: String
@NSManaged var categories: Categories
}
Run Code Online (Sandbox Code Playgroud)
在我创建从技术到类别的关系后,Core Data将此字段添加到Sqlite DB:
ZCATEGORIES - INTEGER
Run Code Online (Sandbox Code Playgroud)
假设我想获取属于类别#3的所有技术(内部ZID:3)
如果我这样做:
request.predicate = NSPredicate(format: "categories == %@", 3)
Run Code Online (Sandbox Code Playgroud)
有用.但如果我这样做:
request.predicate = NSPredicate(format: "categories == %@", category.category)
Run Code Online (Sandbox Code Playgroud)
它不起作用.我知道它不起作用,因为它category.category是一个String,而不是一个Integer.
我的问题是:
我是否必须在类别实体中创建自己的关系ID字段并设置它,然后引用技术,如:
request.predicate = NSPredicate(format: "categories == %@", category.categoryID)
Run Code Online (Sandbox Code Playgroud)
?
是否有办法访问类别的内部ID以使这种关系起作用?
或者更好的是,在我看来应该有一个内部机制来检索这些关系,而无需编写类似SQL的查询,只需使用Object,如:Techniques.categores.
谢谢.我在任何地方都找不到好的答案.
您缺少属性名称,因此谓词知道要比较的类别类的哪个属性.这样您就不需要使用内部唯一ID.虽然它可以派生(并且可以工作),但它并不是采用Core Data的方式,而Core Data正试图为您提取这些信息.
let categoryPredicate = NSPredicate(format: "categories.category == %@", category.category)
Run Code Online (Sandbox Code Playgroud)
如上所述,建议建立反向关系.它允许Core Data维护对象图的一致性,并可用于从类别到其技术.