更新:我找到了答案,虽然可能还有更好的方法 - 请参阅下面添加的答案。为NSMetadataQuery匹配包含目标日期的kMDItemAccessedDates(数组)的NSPredicate?
聚光灯导入器导入元数据,该元数据是访问项目的日期数组。看起来是这样的:
kMDItemAccessedDates = (
"2012-06-18 07:00:00 +0000",
"2013-01-10 08:00:00 +0000",
"2013-01-15 08:00:00 +0000"
)
我想查询任何用户进入特定日期进行访问的,但我没有找到正确的语法要做到这一点,这些文件。想知道是否可以做...
第一个问题是,用户输入的日期代表一天,而不是一天和一天。
好像我需要搜索,关于该日适逢任何日期,所以从逻辑:ADATE >= user_day_start && ADATE <= user_day_end
现在有日期的元数据中的一个数组,所以我真的想匹配,如果其中任何日期的下降在user_date日之内。
是很好,如果这个工作:
NSDate * date = [NSDate dateWithNaturalLanguageString: inWhenString];
NSDate * endDate = [NSDate dateWithTimeInterval: 86400 sinceDate: date];
predicate = [NSPredicate predicateWithFormat:
@"kMDItemAccessedDates between {%@, %@}", date, endDate];
而是抛出异常:
Exception detected while handling key input.
2013-01-16 03:12:57.517 Chatty[96974:403] Unknown type of NSComparisonPredicate
given to NSMetadataQuery
(kMDItemAccessedDates BETWEEN {CAST(379540800.000000, "NSDate"),
CAST(379627200.000000, "NSDate")})
,似乎像它可能只是在某个日期,而不是一个数组工作。将“ANY”添加到格式字符串中,如下所示:"ANY kMDItemAccessedDates between {%@, %@}"
...没有帮助,仍然引发异常。
尝试这样做,它不是抛出一个异常,但并没有真正的工作之一:
NSPredicate *p1 = [NSPredicate predicateWithFormat: @"kMDItemAccessedDates >= %@", date ];
NSPredicate *p2 = [NSPredicate predicateWithFormat: @"kMDItemAccessedDates <= %@", endDate ];
predicate = [NSCompoundPredicate andPredicateWithSubpredicates: [NSArray arrayWithObjects: p1, p2, nil]];
想知道如果任何人有关于如何使这项工作任何想法...或者知道这是不可能的(如必须让他们全部,然后在记忆或其他事情做过滤器;真的希望不是这种情况 - 它可能是一个很长的名单!)。
这很有趣。我以前没有见过CAST。我很高兴你能工作。 – regulus6633