【问题标题】:Compare alphanumeric strings in Core Data比较 Core Data 中的字母数字字符串
【发布时间】:2014-05-25 06:17:44
【问题描述】:

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

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

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

这将导致所有以P 开头且范围在 1 到 15 之间的条目。上面的代码根本不会产生准确的结果。

你知道这是如何实现的吗?

【问题讨论】:

    标签: ios objective-c core-data nspredicate


    【解决方案1】:

    我相信这应该可行

    我没有核心数据设置,因此对一些数组值进行了硬编码。

        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 希望这会有所帮助

    【讨论】:

    • 是的,这可能有效,但我需要它是动态的,即用户可能不一定会搜索带有“P”的任何内容。它可以是任何东西。比如1到10、P5和P15、A3和A9等之间的搜索。
    • 您需要从用户那里获取输入,然后相应地形成谓词。这取决于您的要求。如果用户键入 11,则应显示或不显示 P11 等。或者应显示以 11 开头的任何内容,例如 111,113,110。也是您应用于搜索的限制
    猜你喜欢
    • 2014-09-13
    • 2023-03-19
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2022-01-02
    相关资源
    最近更新 更多