比较Core Data中的字母数字字符串

时间:2014-05-25 06:17:45

标签: ios objective-c core-data nspredicate

我有一个名为'gLotNumber'的核心数据属性,用于存储字母数字字符串。示例包括P1P57P1011

我需要提供一种向用户搜索此属性的方法。我能想到提供这个的方法是使用NSPredicate核心数据:

[fetchRequest1 setPredicate:[NSPredicate predicateWithFormat:@"(gLotNumber >= 'P1') AND (gLotNumber <= 'P15')"]];

这会导致所有条目以P开头,范围在1到15之间。上述代码根本无法生成准确的结果。

你知道如何实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

我相信这应该有用

我没有设置coredata,因此会对某些数组值进行编码。

    NSArray *array = @[@{@"gLotNumber":@"P1"},@{@"gLotNumber":@"P15"},@{@"gLotNumber":@"P13"},@{@"gLotNumber":@"P0"},@{@"gLotNumber":@"11"},@{@"gLotNumber":@"10"},@{@"gLotNumber":@"P31"},@{@"gLotNumber":@"P013"},@{@"gLotNumber":@"16"},@{@"gLotNumber":@"P38"}];
    NSArray *filtered = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF.gLotNumber BEGINSWITH 'P' AND SELF.gLotNumber <= 'P15'"]];
    NSSortDescriptor *desc = [NSSortDescriptor sortDescriptorWithKey:@"gLotNumber" ascending:YES comparator:^NSComparisonResult(id obj1,id obj2){
        return [obj1 compare:obj2 options:NSNumericSearch];
    }];
    NSArray *sorted = [filtered sortedArrayUsingDescriptors:@[desc]];

您可以将排序描述符和谓词设置为fetch request希望这有助于