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];