我的应用程序具有相对简单的模型(继承自现有网站的模型)。
模型的属性之一是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/