好的,我最初想让NSSortDescriptor请求的NSFetchedResultsController根据我的NSManagedObject子类中的属性进行排序,但显然不会这样做,因为NSFetchedResultsController仅限于谓词和对在获取的实体及其实体上工作的描述符进行排序关系,所以我决定在我的数据模型中创建一个过渡属性,将该属性的属性综合到NSManagedObject子类中的ivar中,然后基于该属性进行排序。

运行它时,我在执行获取'NSInvalidArgumentException', reason: 'keypath isActive not found in entity <NSSQLEntity SMSourceEntity id=2>'时得到了

我知道这是KVO问题,因此我添加了+ (NSSet*)keyPathsForValuesAffectingIsActive,但仍然存在相同的问题。

我做错了什么,还是我仍然缺少一些东西来使它找到我的 key 路径?谢谢。

代码:

@implementation SMSourceEntity

@dynamic friendlyName;
@dynamic interfaceAddress;
@dynamic uniqueID;
@dynamic network;
@synthesize isActive = _isActive;

+ (NSSet*)keyPathsForValuesAffectingIsActive
{
    return [NSSet setWithObject:@"isActive"];
}

@end

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

最佳答案

这不是KVO问题,而是您要执行的操作问题,因为FRC要求可以将排序应用于基础SQLite存储。换句话说,您只能对非 transient 属性进行过滤和排序。您将需要使该属性成为非 transient 的,以便将其值保存到存储中并可供SQLite使用。

对于FRC,只有部分名称键路径属性可以是 transient 的。

10-08 12:28