Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在NSMutableArray中捕获默认排序?_Ios_Objective C_Nsmutablearray_Nssortdescriptor - Fatal编程技术网

Ios 在NSMutableArray中捕获默认排序?

Ios 在NSMutableArray中捕获默认排序?,ios,objective-c,nsmutablearray,nssortdescriptor,Ios,Objective C,Nsmutablearray,Nssortdescriptor,我有一个NSMutableArray,其中包含从CloudKit检索到的对象。最初,我不做任何排序,所以它使用检索记录的任何排序顺序。在一些用户交互中,我需要为特定目的对其进行排序。但是,我希望能够撤消排序并返回默认顺序。但是由于初始排序不是我指定的,我想知道是否有一种方法可以捕获初始排序顺序?我查看了NSMutableArray和NSSortDescriptor的文档,没有看到任何可以调用的方法。是否有一种内置的方式是我所缺少的,或者是否有人有一种定制的方式来做到这一点? 谢谢 AFAIK,N

我有一个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];

另外,
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];

另外,
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];

另外,
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];


您应该从一些已知的、合理的排序顺序开始。为什么要从一些未知的随机顺序开始?我可能会,但现在我对从CloudKit检索的顺序没有意见。你应该从一些已知的、正常的排序顺序开始。为什么要从一些未知的随机顺序开始?我可能会,但现在我对从CloudKit检索的顺序没有意见。你应该从一些已知的、正常的排序顺序开始。为什么要从一些未知的随机顺序开始?我可能会,但现在我对从CloudKit检索的顺序没有意见。你应该从一些已知的、正常的排序顺序开始。为什么要从一些未知的随机顺序开始呢?我可能会,但现在我对从CloudKit检索到的顺序没有意见。谢谢。我已经想到了这一点,但正在尝试避免重复数据,即创建另一个数组来仅使用已排序的数据,反之亦然。似乎有一种方法可以捕获当前的排序,从而保存它,这是有道理的。但是如果没有,我可能不得不同意你的建议。@SonnyB-这里的方法不是“复制数据”,而是创建第二个数组,它引用与原始数组完全相同的数据(即对象)。除非您有一个非常大的数组,否则第二个容器的开销不太可能成为问题。将第二个数组看作是对相同数据的排序视图。好的观点……是的,我知道内存/性能的差异可能可以忽略不计,但我想我是在尽量精简它。谢谢谢谢我已经想到了这一点,但正在尝试避免重复数据,即创建另一个数组来仅使用已排序的数据,反之亦然。似乎有一种方法可以捕获当前的排序,从而保存它,这是有道理的。但是如果没有,我可能不得不同意你的建议。@SonnyB-这里的方法不是“复制数据”,而是创建第二个数组,它引用与原始数组完全相同的数据(即对象)。除非您有一个非常大的数组,否则第二个容器的开销不太可能成为问题。将第二个数组看作是对相同数据的排序视图。好的观点……是的,我知道内存/性能的差异可能可以忽略不计,但我想我是在尽量精简它。谢谢谢谢我已经想到了这一点,但正在尝试避免重复数据,即创建另一个数组来仅使用已排序的数据,反之亦然。似乎有一种方法可以捕获当前的排序,从而保存它,这是有道理的。但是如果没有,我可能不得不同意你的建议。@SonnyB-这里的方法不是“复制数据”,而是创建第二个数组,它引用与原始数组完全相同的数据(即对象)。除非您有一个非常大的数组,否则第二个容器的开销不太可能成为问题。将第二个数组看作是对相同数据的排序视图。好的观点……是的,我知道内存/性能的差异可能可以忽略不计,但我想我是在尽量精简它。