【发布时间】:2021-10-31 14:43:03
【问题描述】:
我正在构建一个锻炼应用程序,该应用程序具有一个名为 Workout 的实体和另一个名为 Exercise。 一个锻炼可以包含多个锻炼(因此是一对多的关系)。我想以有序的方式向我的应用程序的用户展示锻炼中包含的练习(从力量练习开始与有氧运动开始不同)。
显然,在 Core Data 中建立这种关系时,我需要使用NSSet,因为如果我尝试使用例如其中元素排序的Array,我会收到以下错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unacceptable type of value for to-many relationship: property = "consistsOf"; desired type = NSSet; given type = __NSArray0; value = (
).'
我尝试检查模型中的“已订购”复选标记,但随后出现错误提示“不得订购 Workout.consistsOf”。
我还尝试使用NSDictionary,其键是位置,值是练习本身,但我遇到了与上述相同的错误。
如何以有序的方式向用户展示锻炼所包含的练习?
提前非常感谢!
P.S.:这是我的模型属性的截图。
【问题讨论】:
-
我认为检查“ordered”会使Core Data使用NSOrderedSet
-
确实如此,在将我的属性转换为
NSORderedSet后,我仍然得到:Workout.consistsOf must not be ordered [8]。我也意识到错误的标题是CloudKit integration -
好吧,那就是另一种情况了。我不是 CloudKit 专家,因为我刚开始使用它,但它肯定会影响(增加更多约束)你可以使用 Core Data 做什么。当然,另一种选择是将您自己的订单属性添加到练习中。
-
恐怕这是 CloudKit 不支持 (NS)OrderedSet 映射的小问题之一 - 至少这是我在去年遇到同样问题时发现的:-/。大多数人似乎正在通过向需要排序的实体添加一个额外的优先级属性来解决这个限制(而不是像链表或类似的更复杂的东西)。
-
这里有更多确认以前的评论和对替代方法的建议appsdissected.com/order-core-data-entities-maximum-speed
标签: core-data