生成 ORDER BY `name` = 'bob' DESC 的 NSSortDescriptor?

NSSortDescriptor which generates ORDER BY `name` = 'bob' DESC?

在原始 SQL 中,将所有鲍勃排在第一位会很简单。

如何使用 NSFetchedResultsController 和 NSSortDescriptor 执行此操作?

我认为你不能用 NSSortDescriptor 做到这一点,因为这是 key-value 排序,不支持表达式。

但是,它可以在 NSFetchRequest 的帮助下工作。将 fetch 请求的结果类型设置为 dictionary

fetchRequest.resultType = NSDictionaryResultType;

然后您可以设置属性以获取您想要的属性,并为计算属性添加一个表达式:

NSExpression *expression = [NSExpression expressionWithFormat:@"name=='bob'"];
NSExpressionDescription *expressionDescription = [NSExpressionDescription new];
expressionDescription.name = "isCalledBob";
expressionDescription.expression = expression;
expressionDescription.resultType = NSBooleanAttributeType;

[fetchRequest propertiesToFetch:@[…, expressionDescription];

然后你可以在键isCalledBob上使用NSSortDescriptor

有了这个,您将获得字典而不是托管 objects。

Safari打字,没测试,我家孩子几分钟就醒了。

我发现解决这个问题的方法是添加一个额外的字段来帮助处理 FRC。即 isBob 每当设置名称时都会更新。