The following code runs great and gives me the results I am looking for. However, I would like to run it in its own thread. Is MPMediaQuery thread safe, and what am I doing wrong, if it is?
-(NSArray*) mediaItemsFromPersistentIds:(NSArray*) mediaPersistentIds
{
if (debug==1) {
NSLog(@"Running %@ '%@'", self.class, NSStringFromSelector(_cmd));
}
MPMediaQuery *mediaQuery = [MPMediaQuery new];
NSArray *itemsmediaQuery = mediaQuery.items;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K IN %@", @"itemId", mediaPersistentIds];
return [itemsmediaQuery filteredArrayUsingPredicate:predicate];
}
When I try the following, I get
Terminating app due to uncaught exception 'MPMediaItemCollectionInitException', reason: 'items array must not be empty'
I know the [itemsmediaQuery filteredArrayUsingPredicate:predicate]
is being returned as (null)
-(NSArray*) mediaItemsFromPersistentIds:(NSArray*) mediaPersistentIds
{
if (debug==1) {
NSLog(@"Running %@ '%@'", self.class, NSStringFromSelector(_cmd));
}
__block NSArray *itemsmediaQuery;
__block NSPredicate *predicate;
dispatch_queue_t mediaQueryQueue = dispatch_queue_create("media query", NULL);
dispatch_async(mediaQueryQueue, ^{
MPMediaQuery *mediaQuery = [MPMediaQuery new];
itemsmediaQuery = mediaQuery.items;
predicate = [NSPredicate predicateWithFormat:@"%K IN %@", @"itemId", mediaPersistentIds];
});
return [itemsmediaQuery filteredArrayUsingPredicate:predicate];
}