简而言之:
获取实体并根据不是属性
的@property
对它们进行排序将导致错误(涉及NSDictionaryMapNode
)第二次运行。
这是正常现象还是bug?您对此有什么意见或帮助吗?
长:
情况如下。
我有一个带有两个属性 attribute1
和 attribute2
的 Entity
。
我已经生成了[1]一个类Entity.m
并向其添加了一个名为myProperty
的@property
>。因此,myProperty
是我的类Entity.m
的@property
,但不是实体Entity
的属性。顺便说一句,myProperty
是只读
(假设它类似于 attribute1
与 attribute2
连接。
现在,我执行以下操作:
NSManagedObjectContext * myContext = ... ;
NSFetchRequest * myRequest = [NSFetchRequest fetchRequestWithEntityName:@"Entity"];
NSSortDescriptor * mySortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"myProperty"
ascending:YES] ;
NSError *error ;
[myRequest setSortDescriptors:@[mySortDescriptor]] ;
NSArray * result = [myContext executeFetchRequest:myRequest
error:&error] ;
第一次执行此代码时,没有任何错误。
第二次时,我遇到以下错误:
[<NSDictionaryMapNode 0x1020cf310> valueForUndefinedKey:]: this class is not key value coding-compliant for the key myProperty.
我知道问题来自于 myProperty
不是 Entity
的属性。我发帖的目的是提出这种情况,并了解您是否对此情况有任何评论。
最佳答案
这是已知的。您无法对商店中不持久的任何内容进行排序。它永远不应该工作(第一次工作意味着你没有 MOC 或类似的东西)。
您应该向持久实体添加一个新属性。执行诸如实现 willSave
之类的操作或观察依赖键并使用该触发器来更新新属性 (myProperty
) 的值。
请参阅 Core Data Programming Guide 的获取谓词和排序描述符
部分
关于ios - 使用 Core Data 进行排序的 fetchRequest 有哪些限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19401055/