Ios NSFetchedResultsController的瞬态属性上的NSSortDescriptor

Ios NSFetchedResultsController的瞬态属性上的NSSortDescriptor,ios,objective-c,key-value-observing,nssortdescriptor,transient,Ios,Objective C,Key Value Observing,Nssortdescriptor,Transient,好的,我最初想让NSSortDescriptor请求NSFetchedResultsController根据我的NSManagedObject子类中的属性进行排序,但显然不行,由于NSFetchedResultsController仅限于处理获取的实体及其关系的谓词和排序描述符,因此我决定在数据模型中创建一个临时属性,在我的NSManagedObject子类中将该属性的属性合成为ivar,并基于它进行排序 运行它时,我在执行fetch时得到了“NSInvalidArgumentException

好的,我最初想让
NSSortDescriptor
请求
NSFetchedResultsController
根据我的
NSManagedObject
子类中的属性进行排序,但显然不行,由于NSFetchedResultsController仅限于处理获取的实体及其关系的谓词和排序描述符,因此我决定在数据模型中创建一个临时属性,在我的
NSManagedObject
子类中将该属性的属性合成为ivar,并基于它进行排序

运行它时,我在执行fetch
时得到了“NSInvalidArgumentException”,原因是:“在实体中找不到keypath isActive”

我知道这是KVO的问题,所以我添加了
+(NSSet*)keypathsforvaluesafectingisactive
,但仍然存在相同的问题

我做错了什么,或者我仍然缺少一些东西来让它找到我的钥匙路径?谢谢

代码:

我的sortDescriptor:

request.sortDescriptors = [NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"isActive" ascending:NO] , nil];

这不是一个
KVO
问题,这是一个您试图做什么的问题,因为FRC要求排序可以应用于底层SQLite存储。换句话说,您只能对非瞬态属性进行过滤和排序。您需要将属性设置为非瞬态,以便将其值保存到存储中并可供SQLite使用


对于FRC,只有section name key path属性可以是瞬态的。

谢谢,因此如果我希望瞬态属性与我的FRC一起使用,我必须对其进行子类化,获取获取结果,然后根据didChangeContent:中的属性对获取对象的数组进行排序?这有意义吗?我认为这很难做到,因为您将不得不编写大量代码或放弃使用FRC的大部分好处(如分页按需加载)。你应该在个案的基础上考虑其他的选择。比如对不同的部分使用多个FRC之类的。
request.sortDescriptors = [NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"isActive" ascending:NO] , nil];