objective-c - 按 NSDate 属性对自定义对象的 NSArray 进行排序

标签 objective-c cocoa sorting nsarray nsdate

我正在尝试对填充有自定义对象的 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/

相关文章:

ios - 在 objective-c 中将 .png 图像转换为 pdf

objective-c - NSUserDefaults registerDefaults bool 值 YES 返回 NO

c++ - 推力按键即时排序还是不同的方法?

objective-c - 如何在 Objective-C 的 NSTextField 中组合 char 和 int?

objective-c - 如何在 Objective-C 中进行矩阵和向量数学运算?

xcode - 如何删除 Big Sur 上的 NSTableView 缩进

list - haskell快速排序,为什么首先让使用<=而不是<?

php - 从数据库输入后用 PHP 对 HTML 表进行排序

iphone - Xcode : How do I make a map that can show nearby locations?

ios - NSFetchedResusltsController 宣布了一个举动,但应该是一个更新