【问题标题】:Parse : How to custom sort?Parse:如何自定义排序?
【发布时间】:2015-08-27 07:23:05
【问题描述】:

我想按数组的索引号对对象进行排序。

我有一个按特殊顺序填充的数据数组,并希望按该顺序显示它们。

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.favArray 的对象相同的 objectId 的对象。然后,我想将检索到的对象按照 self.favArray 的顺序填充到 self.imageFilesArray 中。

标签: objective-c parse-platform pfquery


【解决方案1】:

您可以在将数组设置为 self.imageFilesArray 之前对数组进行排序。

类似的东西:

NSArray *sortedArray = [objects sortedArrayUsingComparator:^NSComparisonResult(PFObject *a, PFObject *b) {
    return [[a objectForKey:@"index"] compare:[b objectForKey:@"index"]];
}];
self.imageFilesArray = sortedArray;

【讨论】:

  • 嗯,不,我正在尝试从本地数据库 (sqlite) 中的数组设置顺序。 self.favArray 是一个填充了来自 sqlite 的数据的数组,我想按照 self.favArray 的顺序对从 Parse 检索到的对象进行排序。
【解决方案2】:

为此,您需要在本地进行排序,因为没有索引值可用于对数据进行远程排序。您应该知道,如果您的解析结果超出页面的容量,您将需要处理...

本地排序:

NSArray *sortedArray = [objects sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    return [@([self.favArray indexOfObject:a]) compare:@([self.favArray indexOfObject:b])];
}];

self.imageFilesArray = sortedArray;

【讨论】:

    【解决方案3】:

    解决了。

        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];
        }
    

    如果需要倒序(倒序数组的索引顺序)

    - (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--;
    }}
    

    【讨论】:

    • 这实际上是一个答案,还是对问题的补充?
    • 这是我自己的问题的答案,它确实有效,另外我还要问一个问题。
    • 使用枚举器来颠倒顺序,更不用说代码了。这里不应该出现新问题
    • 首先尝试过,但有些人声称它对我不起作用。它返回了一个顺序错误的数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    相关资源
    最近更新 更多