我正在尝试对填充有自定义对象的 NSArray 进行排序。每个对象都有一个 NSDate 类型的属性 startDateTime
。
以下代码生成一个数组 sortedEventArray
,该数组已填充但未排序。我是不是以完全错误的方式解决这个问题,还是只是遗漏了一些小东西?
NSSortDescriptor *dateDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"startDateTime"
ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:dateDescriptor];
NSArray *sortedEventArray = [nodeEventArray sortedArrayUsingDescriptors:sortDescriptors];
最佳答案
您确定节点事件的 startDateTime
实例变量不为零吗?
如果您还没有,您可以添加一个(自定义)-description
方法到您的节点事件对象,它会执行如下操作:
- (NSString *)description {
return [NSString stringWithFormat:@"%@ - %@",
[super description], startDateTime]];
}
然后在您的排序代码中记录前后的数组:
NSLog(@"nodeEventArray == %@", nodeEventArray);
NSSortDescriptor *dateDescriptor = [NSSortDescriptor
sortDescriptorWithKey:@"startDateTime"
ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:dateDescriptor];
NSArray *sortedEventArray = [nodeEventArray
sortedArrayUsingDescriptors:sortDescriptors];
NSLog(@"sortedEventArray == %@", sortedEventArray);
如果 startDateTime
都是 nil
,则前后数组的顺序相同(因为排序操作等同于发送所有 >-compare:
消息到 nil
,基本上什么都不做)。
关于objective-c - 按 NSDate 属性对自定义对象的 NSArray 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6083408/