I am trying to create a NSMetadataQuery with a predicate. At a certain point I may want to gather all videos iCloud may have at another point all images. I don't want anything else, just search for videos or search for images. Not both at the same time.
I have created this code:
CFStringRef whatToFilter = kUTTypeImage;
if (self.filterType == kKindVideo) {
whatToFilter = kUTTypeVideo;
}
NSPredicate *predType = [NSPredicate predicateWithFormat:@"(%K == %@)", NSMetadataItemContentTypeKey, whatToFilter];
NSMetadataQuery *newQuery = [[NSMetadataQuery alloc] init];
[newQuery setSearchScopes:@[NSMetadataQueryUbiquitousDocumentsScope]];
newQuery.predicate = predType;
as soon as I add this predicate to newQuery it gives me zero results.
What is the correct syntax for this query? Don't tell me that the predicate is also not working for NSMetadataQuery, because sort is not working either.
The best way to create a correct
NSMetadataQuerypredicate is to use the Finder's query expression editor, like so:Then save it as a Smart Folder and Get Info on the resulting folder:
The relevant Spotlight query syntax is, in this instance:
"(kMDItemUserTags == 'Assets'cd)"... (Ignore the_kMDItemGroupIdsubexpression, as attribute names beginning with underscores are not public API.)Finally, let
NSPredicatefigure out how it wants the query string rewritten: