以下代码运行良好,并为我提供了我正在寻找的结果。但是,我想在它自己的线程中运行它。MPMediaQuery 线程是否安全,如果是,我做错了什么?
-(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];
}
当我尝试以下操作时,我得到
由于未捕获的异常“MPMediaItemCollectionInitException”而终止应用程序,原因:“项目数组不能为空”
我知道[itemsmediaQuery filteredArrayUsingPredicate:predicate]
返回为 (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];
}