ios - 使用复杂条件获取数据

标签 ios core-data nspredicate

我的应用程序具有相对简单的模型(继承自现有网站的模型)。

模型的属性之一是date。不幸的是,此属性的值是相当自由的格式并且类型为 String。我的意思是,值(value)观就像:

  • “1888 年 6 月,阿尔勒”
  • “约 1530 年”
  • “1634-37”
  • “1508”

有没有一种方法可以构建一个谓词,允许我将这些值转换为整数值,以便我可以对 date 属性的值执行搜索?

目前我使用的是简单的方法:

NSString *format = @"date contains[cd] %i";
NSPredicate *predicate = [NSPredicate predicateWithFormat:format, year];

但它不允许我找到两个给定日期之间的所有内容。

最佳答案

你……这里可能有问题。任何日期都可以转换为整数值,NSDateFormatter 可以很好地解析日期如果您知道要使用什么格式。您似乎有多种截然不同的格式,因此您不会通过简单的转换或搜索来获取日期字符串的整数值。

只找到一个四位数的年份会很容易,但是您的“1634-37”示例有点颠覆了这个想法。如果您搜索的是 1636,它应该匹配,但如果没有一些额外的帮助,它不会匹配。如果您可以接受一定程度的误差,您可能不会在意——只需调用那个 1634 就可以了。如果不是,首先你需要一个日期范围(最小 1634,最大 1637)而不是一个日期,其次,你需要一些方法来意识到“-37”应该应用于“16” .祝你好运,因为这正在迅速成为一个复杂的问题。

如果只有几种可能的日期格式,您可以为每种格式设计一个解析器,然后使用正则表达式匹配或反复试验来为字符串选择解析器。但是,如果有很多 格式,您就有点搞砸了。您最好手动编辑数据,以您的应用可以理解的首选格式输入日期。最终,这实际上取决于您需要如何精确地使用数据,以及您可以容忍结果中的误差。

稍微单独说明一下,如果是我,我想在从网络服务器接收到数据时将这些转换为数值。然后在进行提取时,我将能够在谓词中使用数字匹配以获得快速结果。匹配字符串——尤其是当您需要使用正则表达式时——与数字比较相比非常慢。

关于ios - 使用复杂条件获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17404995/

相关文章:

ios - HealthKit:HKObserverQuery不触发

iOS:LaunchScreen.storyboard 上的新图像未显示正在更新的应用程序

ios - nsset,核心数据,正确的谓词

ios - core Data 重启应用后删除数据

ios - 删除核心数据数据库,并在更新时重新创建它

objective-c - NSPredicate 对数组进行排序并按 DESC 顺序

swift - 由于字符集而从核心数据谓词中获取数据出现问题

ios - 追加和预追加\n 到 NSMutableString

iOS - 从另一个呈现的 View Controller 呈现 View Controller

ios - 如何在不使用 contextForCurrentThread 的情况下使用 Magical Record 创建和更新对象并保存它们