Objective c 解析:如何自定义排序?
我想按数组的索引编号对对象进行排序 我有一个特殊顺序的数据填充数组,并希望按该顺序显示它们Objective c 解析:如何自定义排序?,objective-c,parse-platform,pfquery,Objective C,Parse Platform,Pfquery,我想按数组的索引编号对对象进行排序 我有一个特殊顺序的数据填充数组,并希望按该顺序显示它们 PFQuery *query = [PFQuery queryWithClassName:@"photoObject"]; [query whereKey:@"objectId" containedIn:self.favArray]; [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { [query
PFQuery *query = [PFQuery queryWithClassName:@"photoObject"];
[query whereKey:@"objectId" containedIn:self.favArray];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
[query setCachePolicy:kPFCachePolicyNetworkOnly];
if (!error) {
self.imageFilesArray = [[NSArray alloc]initWithArray:objects];
[self.favCV reloadData];
}
可以在将数组设置为self.imageFilesArray之前对其进行排序 诸如此类:
NSArray *sortedArray = [objects sortedArrayUsingComparator:^NSComparisonResult(PFObject *a, PFObject *b) {
return [[a objectForKey:@"index"] compare:[b objectForKey:@"index"]];
}];
self.imageFilesArray = sortedArray;
为此,您需要进行本地排序,因为没有用于远程排序数据的索引值。您应该知道,如果您有更多的结果,而不是适合在一个页面从解析您将需要处理 要在本地排序,请执行以下操作:
NSArray *sortedArray = [objects sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
return [@([self.favArray indexOfObject:a]) compare:@([self.favArray indexOfObject:b])];
}];
self.imageFilesArray = sortedArray;
解决了
self.imageFilesArray = nil;
self.imageFilesArray = [[NSMutableArray alloc]init];
[self.imageFilesArray addObjectsFromArray:objects];
if (!error) {
for (PFObject *object in objects) {
int index = (int)[self.favArray indexOfObject:[object objectId]];
[self.imageFilesArray replaceObjectAtIndex:index withObject:object];
}
[self.favCV reloadData];
}
如果需要反转顺序(反转数组的索引顺序)
-(无效)反向{
if([self.imageFilesArray count]你的问题没有说你在谈论哪个数组或者特殊顺序是什么…抱歉。正如你看到的,我正在检索与self.favArray的对象匹配的objectId的对象。然后,我想按self.favArray的顺序将检索到的对象填充到self.imageFilesArray中。嗯,不,我正在尝试从数组中设置顺序在我的本地数据库(sqlite)中.self.favArray是一个数组,其中填充了来自sqlite的数据,我想按照self.favArray的顺序对从解析中检索到的对象进行排序。这实际上是一个答案,还是对问题的补充?这是对我自己的问题的答案,实际上是有效的,另外我还问了一个问题。使用枚举器颠倒顺序,更不用说cod了e、 新问题不应该首先在这里尝试,但正如一些人声称的那样,它对我不起作用。它返回了一个顺序错误的数组。
- (void)reverse {
if ([self.imageFilesArray count] <= 1)
return;
NSUInteger i = 0;
NSUInteger j = [self.imageFilesArray count] - 1;
while (i < j) {
[self.imageFilesArray exchangeObjectAtIndex:i
withObjectAtIndex:j];
i++;
j--;
}}