NSFetchedResultsController的瞬态属性的NSSortDescriptor

时间:2013-07-25 09:02:13

标签: ios objective-c key-value-observing nssortdescriptor transient

好的,我最初想让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

我的sortDescriptor:

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

1 个答案:

答案 0 :(得分:16)

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

对于FRC,只有段名称键路径属性可以是瞬态的。