生成 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
每当设置名称时都会更新。
在原始 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
每当设置名称时都会更新。