1

我使用过滤我的表格结果NSPredicate

   NSPredicate *resultPredicate = [NSPredicate
                                    predicateWithFormat:@"Name CONTAINS[cd] %@ OR Address CONTAINS[cd] %@",
                                    searchText,
                                    searchText];

    searchResults = [NSMutableArray array];

    for (key in dict) {

        if ([resultArray containsObject:key]) {

            NSArray *array = [dict objectForKey:key];
            matches = [array filteredArrayUsingPredicate:resultPredicate];

            if (matches.count > 0) {

                [searchResults addObjectsFromArray:matches];
                // sorting array
                NSSortDescriptor *sort=[NSSortDescriptor sortDescriptorWithKey:@"Distance" ascending:YES];
                [searchResults sortUsingDescriptors:[NSArray arrayWithObject:sort]];
            }

        }
    }

    }

然后我使用排序结果数组NSSortDescriptor

NSSortDescriptor *sort=[NSSortDescriptor sortDescriptorWithKey:@"Distance" ascending:YES];
                [searchResults sortUsingDescriptors:[NSArray arrayWithObject:sort]];

它正在工作,但并非适用于所有结果:

在此处输入图像描述

4

2 回答 2

5

排序不正确,因为它解释Distance为字符串,而不是数字。字符串是按字典顺序排列的,意思100.00 km是在 前面2.00 km,因为1的起始位100.00 km小于2的起始位2.00 km

NSNumber您可以通过在表示距离时使用代替来修复它NSString,或者通过用零填充所有值来强制相同的位数以达到相同的长度。

于 2013-05-13T15:25:15.807 回答
2

您应该对一个数字进行排序,这是以米为单位的标准化距离,而不是显示字符串(对带有数字的字符串进行排序需要不同的逻辑)。

于 2013-05-13T15:26:09.437 回答