下面的代码运行得很好,并给出了我正在寻找的结果。但是,我想在它自己的线程中运行它。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];
}发布于 2014-02-02 19:09:35
在后台请求这些项目是安全的。
现在,您实际上并不是在后台运行查询。你可以这样做:
- (void)mediaItemsFromPersistentIds:(NSArray*)ids
callback:(void (^)(NSArray *items))callback {
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", ids];
// Do the query
NSArray *items = [itemsmediaQuery filteredArrayUsingPredicate:predicate];
// Post the query results to the main thread in some way
dispatch_async(dispatch_get_main_queue(), ^{
// You could pass this off to a delegate or callback block
if (callback)
callback(items);
});
});
}并称之为:
NSArray *ids = ...
[someObj mediaItemsFromPersistentIds:ids callback:^(NSArray *items) {
// Do something with `items`
}];https://stackoverflow.com/questions/21514515
复制相似问题