捕获 NSMutableArray 中的默认排序?

Capture default sorting in NSMutableArray?

我有一个 NSMutableArray,其中包含从 CloudKit 检索到的对象。最初,我没有进行任何排序,所以它使用检索到的记录的任何排序顺序。有一些用户交互,我需要根据特定目的对其进行排序。但是,我希望能够撤消排序并返回到默认顺序。但是由于初始排序不是我指定的,我想知道是否有办法捕获初始排序顺序?我查看了 NSMutableArray 和 NSSortDescriptor 的文档,但没有看到任何可以调用的方法。是否有我缺少的内置方式,或者是否有人有自定义方式来执行此操作? 谢谢!

AFAIK,NSArray(因此 NSMutableArray)没有任何特殊的默认排序。他们的顺序就是最开始添加的顺序对象。

NSArray *arr1 = @[@1, @2, @3];
NSLog(@"%@", arr1); // (1, 2, 3)

NSArray *arr2 = @[@3, @1, @2];
NSLog(@"%@", arr2); // (3, 1, 2)

您的问题的一个解决方案是存储初始数组,当用户想要对其进行排序时,您复制初始数组,对其进行排序并将其显示给用户,同时保留原始数组。如果用户想要撤消它,您只需显示原始数组并删除已排序的副本。

这是非常基本的伪代码:

NSMutableArray *originalArray = [self arrayFromCloudKit]; // fetch from CloudKit

// now the user wants it sorted alphabetically 
NSMutableArray *alphabeticallySorted = originalArray.mutableCopy
[alphabeticallySortedsortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
[self storeOriginalArray:originalArray];
[self displayUIWithArray:alphabeticallySorted];

// but if the user changes their mind, you just fetch the original and delete the sorted
NSMutableArray *originalArray = [self getOriginalArray];
[self displayUIWithArray:originalArray];