更新:我找到了答案,尽管可能还有更好的方法 - 请参阅下面添加的答案。
聚光灯导入器导入元数据,元数据是访问项目的日期数组。看起来像这样:
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]];
想知道是否有人对如何使这项工作有任何想法......或者知道这是不可能的(比如必须全部获得它们,然后在内存中进行过滤或其他东西;真的希望不是这样 - 它可能是一个很长的列表!)。