Iphone 使用NSSortDescriptor定制订单

Iphone 使用NSSortDescriptor定制订单,iphone,xcode,nssortdescriptor,Iphone,Xcode,Nssortdescriptor,假设我有不同状态的对象。状态从0到2。我需要使用NSSortDescriptor按以下方式对它们进行排序: 一, 二, 0 有什么建议吗?使用自定义比较器或选择器NSSortDescriptor提供了一些您应该了解的方法。从: 但是,如果将此类排序描述符传递给核心数据获取请求,则可能会遇到问题。类似于以下内容(未测试): 谢谢你,没关系,但是你能帮我做一下“这里所有的自定义比较逻辑”吗。我是个新手…这是一个NSNumber,所以你需要integerValue得到一个简单的整数。将它们与进行比较,

假设我有不同状态的对象。状态从0到2。我需要使用NSSortDescriptor按以下方式对它们进行排序:

一,

二,

0


有什么建议吗?

使用自定义比较器或选择器
NSSortDescriptor
提供了一些您应该了解的方法。从:

但是,如果将此类排序描述符传递给核心数据获取请求,则可能会遇到问题。

类似于以下内容(未测试):


谢谢你,没关系,但是你能帮我做一下“这里所有的自定义比较逻辑”吗。我是个新手…这是一个NSNumber,所以你需要
integerValue
得到一个简单的整数。将它们与进行比较,并根据您希望的订购方式返回
传感器解除搜索
传感器解除搜索
传感器解除搜索
。在您的例子中,如果
[self integerValue]
是1,那么它总是
去排序
(因为我们已经检查了相等性)。如果它是0,那么它总是
去下移
。如果是2,则需要检查其他值以确定返回哪个值。无法在类别中获取要调用的描述符(customStatusCompare:)。您看到了什么错误?您确定正在编译提供实现的.m文件吗?您是否将@interface.h包含到引用
customStatusCompare:
的文件中?我已经让它工作了,成功与否取决于您传递状态的顺序。我需要一个独立的分拣机。这是我的代码:-(NSComparisonResult)customStatusCompare:(NSNumber*)status{if([self-isEqual:status]){return-sensorderedname;}else-if([self-isEqual:[NSNumber-whithint:2]]){return sensorderedname;}else-if([self isEqual NSNumber-numberwhithint:1]]){return sensorderedname;}否则如果([self isEqual:[NSNumber numberwhithint:0]]){return sensorderedescending;}return 0;}@endWe似乎有这些核心数据获取请求“问题”。你能详细说明原因吗?核心数据只是抛出了一个异常。排序描述符是什么样子的?不能对核心数据获取请求使用自定义选择器或比较器。明白了。谢谢我们试着用一个比较仪。
+ sortDescriptorWithKey:ascending:selector:
– initWithKey:ascending:selector:
+ sortDescriptorWithKey:ascending:comparator:
– initWithKey:ascending:comparator:
descriptor = [[[NSSortDescriptor alloc]
          initWithKey:@"status"
          ascending:YES
          selector:@selector(customStatusCompare:)] autorelease];

@interface NSNumber (CustomStatusCompare)
- (NSComparisonResult)customStatusCompare:(NSNumber*)other;
@end

@implementation NSNumber (CustomStatusCompare)
- (NSComparisonResult)customStatusCompare:(NSNumber*)other {
  NSAssert([other isKindOfClass:[NSNumber class]], @"Must be a number");
  if ([self isEqual:other]) {
    return NSOrderedSame;
  }
  else if (... all your custom comparison logic here ...)
  }
}