Ios 按关系筛选核心数据对象
我有两个对象:Ios 按关系筛选核心数据对象,ios,swift,core-data,one-to-many,entity-relationship,Ios,Swift,Core Data,One To Many,Entity Relationship,我有两个对象:Category和Item。项目有一个名称字段、价格字段和数量字段。类别有一个名称字段。一个类别也有许多项。当我访问类别的表视图时我想显示与该类别相关的所有项目。下面是我在添加新的项目以及提取类别以显示其所有项目时如何设置关系的代码。我没有正确地保存关系吗 储蓄关系 获取类别的项目 我的数据模型 因为项目关系与类别关系相反,所以不需要同时设置两者。如果将关系设置为一种方式,核心数据将自动执行另一种方式: item.setValue(selectedCategory, forKey
Category
和Item
。项目
有一个名称
字段、价格
字段和数量
字段。类别
有一个名称
字段。一个类别也有许多项
。当我访问类别的表视图时
我想显示与该类别相关的所有项目
。下面是我在添加新的项目
以及提取类别
以显示其所有项目时如何设置关系的代码。我没有正确地保存关系吗
储蓄关系
获取类别的项目
我的数据模型
因为项目
关系与类别
关系相反,所以不需要同时设置两者。如果将关系设置为一种方式,核心数据将自动执行另一种方式:
item.setValue(selectedCategory, forKey: "category")
因此,以下行不是必需的
// selectedCategory: the parent of this new item
selectedCategory.setValue(NSOrderedSet(object: item), forKey: "item")
此外,您的谓词在获取中是错误的-不需要在谓词中使用name
属性-CoreData将(在引擎盖下)使用自己的主键。因此,修正这一点:
fetchRequest.predicate = NSPredicate(format: "category = %@", category?.valueForKey("name") as! String)
为此:
fetchRequest.predicate = NSPredicate(format: "category = %@", category!)
保存项目时,选择的类别是什么?它是如何创建的?selectedCategory
是我的数据模型的一个类别,我希望该项是其子项。它是在切换到此视图时设置的。是否有任何错误?在fetchRequest谓词中,您指的是category?.valueForKey。您确定返回值吗?没有错误。它只是运行,将项目保存到核心数据,但它在每个类别中都被引用。是的,这个值可以很好地打印出来。
fetchRequest.predicate = NSPredicate(format: "category = %@", category?.valueForKey("name") as! String)
fetchRequest.predicate = NSPredicate(format: "category = %@", category!)