9

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

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

我知道这是 KVO 问题,所以我添加了+ (NSSet*)keyPathsForValuesAffectingIsActive,但仍然有同样的问题。

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

代码:

@implementation SMSourceEntity

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

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

@end

我的排序描述符:

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

1 回答 1

18

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

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

于 2013-07-25T09:04:49.080 回答