2013-07-01 35 views
0

我的应用程序具有相对简单的模型(从现有的Web站点的模型继承)。与复杂的标准获取数据

一个模型的属性是date。不幸的是,这个属性的值是非常自由的,并且类型为String。我的意思是,价值是这样的:

  • “1888年6月,阿尔勒”
  • “1634年至1637年”
  • “1508”

是否有一个 “C 1530”。建立一个谓词的方法,这将允许我将这些值转换为整数值,以便我可以对date属性的值执行搜索?

目前我使用简单的方法:

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

,但它不是让我找到两个给定日期间的一切。

回答

1

您...可能有问题在这里。任何日期可以转化为一个整数值,并NSDateFormatter做解析日期如果你知道用什么格式的一份体面的工作。您似乎有多种非常不同的格式,因此您无法通过简单的转换或搜索来获取日期字符串的整数值。

发现只是一个四位数年份将是很容易的,但你的“1634至1637年”那种击打的例子一念之差。如果你的搜索是1636,它应该匹配,但它不会没有一些额外的帮助。如果你能接受一定程度的错误,你可能不会在乎 - 只需调用一个1634并完成它。如果不是,首先你需要一个日期范围(最小1634,最大1637)而不是一个日期,其次,你需要一些方法来认识到“-37”应该适用于“16” 。祝你好运,因为这正在迅速成为一个复杂的问题。

如果只有几个可能的日期格式,你能想出为每一个分析器,然后要么使用正则表达式匹配或试错法来选择一个字符串解析器。如果有批次的格式,但你是有点拧。手动编辑数据会更好,以您的应用可以理解的首选格式输入日期。最终,这取决于您需要如何使用这些数据以及结果中可以容忍多少错误。

在一个稍微不同的音符,如果是我,我会想,当我从Web服务器接收到的数据将这些转换为数值。然后当进行提取时,我可以在谓词中使用数字匹配来获得快速结果。匹配字符串 - 尤其是如果您需要使用正则表达式 - 与数字比较相比非常慢。

+0

谢谢,我认为你是对的,事先转换值会更好。毕竟,数据很少发生变化,我可以容忍一些不准确的地方,比如1634-37就是1634。 – Bobrovsky

1

结合NSPredicate使用正则表达式。这是一个链接。使用正则表达式来搜索一个4位数字 NSPredicate and Regex

+0

谢谢。这是伟大的有可能性,但我最好远离正则表达式:-)无论如何,再次感谢你。 – Bobrovsky