Ios 使用MPMediaQuery在iPod库中用视频填充UITableView时出现问题

Ios 使用MPMediaQuery在iPod库中用视频填充UITableView时出现问题,ios,uitableview,storyboard,mpmediaquery,Ios,Uitableview,Storyboard,Mpmediaquery,我正在尝试组合一个简单的应用程序,列出iPod库中的所有视频(电影、电视节目等),并允许用户播放他们选择的任何视频。该应用程序正在使用一个故事板,其中有一个导航控制器,其中包含UITableView 看起来该查询实际上是在获取MPMediaItems,但是没有使用每个电影的标题更新单元格。你能看看这个,告诉我我做错了什么吗 以下是.h: #import <UIKit/UIKit.h> #import <MediaPlayer/MediaPlayer.h> @interf

我正在尝试组合一个简单的应用程序,列出iPod库中的所有视频(电影、电视节目等),并允许用户播放他们选择的任何视频。该应用程序正在使用一个故事板,其中有一个导航控制器,其中包含UITableView

看起来该查询实际上是在获取MPMediaItems,但是没有使用每个电影的标题更新单元格。你能看看这个,告诉我我做错了什么吗

以下是.h:

#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>

@interface MovieListViewController : UITableViewController
{
    MPMediaQuery * _movieQuery;
    NSArray * _movieArray;
}

@property (nonatomic,strong) MPMediaQuery *movieQuery;
@property (nonatomic,strong) NSArray *movieArray;

@end

问题在于这一行:

MPMediaItem *item = [[self.movieQuery items]objectAtIndex:[indexPath row]];
改为:

MPMediaItem *item = [movieArray objectAtIndex:[indexPath row]];
您没有向
movieQuery
对象添加任何内容,而是在
viewDidLoad
中创建了一个本地
MPMediaQuery
对象并使用了它

另一种解决方案:

更改
viewDidLoad
如下:

- (void)viewDidLoad
{
    [super viewDidLoad];

    MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInteger:MPMediaTypeAnyVideo] forProperty:MPMediaItemPropertyMediaType];

    self.movieQuery = [[MPMediaQuery alloc] init];
    [movieQuery addFilterPredicate:predicate];

    NSLog(@"movieQuery got back %u results",[[self.movieQuery items]count]);

    self.movieArray = [self.movieQuery items];

}

问题在于这一行:

MPMediaItem *item = [[self.movieQuery items]objectAtIndex:[indexPath row]];
改为:

MPMediaItem *item = [movieArray objectAtIndex:[indexPath row]];
您没有向
movieQuery
对象添加任何内容,而是在
viewDidLoad
中创建了一个本地
MPMediaQuery
对象并使用了它

另一种解决方案:

更改
viewDidLoad
如下:

- (void)viewDidLoad
{
    [super viewDidLoad];

    MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInteger:MPMediaTypeAnyVideo] forProperty:MPMediaItemPropertyMediaType];

    self.movieQuery = [[MPMediaQuery alloc] init];
    [movieQuery addFilterPredicate:predicate];

    NSLog(@"movieQuery got back %u results",[[self.movieQuery items]count]);

    self.movieArray = [self.movieQuery items];

}

发现问题了*项目需要来自movieArray,而不是movieQuery。正确的代码是MPMediaItem*item=[self.movieArray objectAtIndex:[indexPath行]];发现问题了*项目需要来自movieArray,而不是movieQuery。正确的代码是MPMediaItem*item=[self.movieArray objectAtIndex:[indexPath行]];