1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
| #import "ILVideosTableViewController.h" #import "MBProgressHUD+MJ.h" #import "Video.h" #import <SDWebImage/SDWebImage.h> #import <MediaPlayer/MediaPlayer.h> #import "GDataXMLNode.h"
#define Url(path) [NSURL URLWithString:[NSString stringWithFormat:@"http://localhost:8080/MJServer/%@",path]];
@interface ILVideosTableViewController ()<NSXMLParserDelegate>
@property(nonatomic,strong) NSMutableArray *videos;
@end
@implementation ILVideosTableViewController
-(NSMutableArray *)videos { if (_videos==nil) { _videos=[NSMutableArray array]; } return _videos; } - (void)viewDidLoad { [super viewDidLoad]; //加载服务器的最新视频信息 //1-创建URL NSURL *url=Url(@"video?type=XML"); //2-创建请求 NSURLRequest *request=[NSURLRequest requestWithURL:url]; //3-发送请求 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { if (connectionError||data==nil) { [MBProgressHUD showError:@"请求失败"]; return; } //解析XML数据 //1-创建XML解析器- SAX-逐个元素往下解析 NSXMLParser *parser=[[NSXMLParser alloc]initWithData:data]; //2.设置代理 parser.delegate=self; //3-开始解析 [parser parse]; //刷新表格 //NSLog(@"---%d",data.length); [self.tableView reloadData]; }]; } //解析道文档的开头时会调用那个方法 //elementName-元素名称,attributeDict-属性字典
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{ //NSLog(@"didStartElement----%@",elementName); NSLog(@"attributeDict:%@",attributeDict); if([@"videos" isEqualToString:elementName])return;//vides标签,返回 Video *video=[Video videoWithDict:attributeDict]; [self.videos addObject:video]; }
//解析到文档的结尾时会调用 //elementName-元素名称 -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { //NSLog(@"didEndElement----%@",elementName); } #pragma mark - Table view data source - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.videos.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *ID=@"ID"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; if(!cell){ cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID]; } Video *video=self.videos[indexPath.row]; cell.textLabel.text=video.name; cell.detailTextLabel.text=[NSString stringWithFormat:@"时长:%d分钟",video.length]; //NSString *imageUrl=[NSString stringWithFormat:@"http://localhost:8080/MJServer/%@",video.image]; NSURL *url=Url(video.image); [cell.imageView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder"]]; return cell; } #pragma 代理方法 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { //取出视频模型 Video *video=self.videos[indexPath.row]; NSLog(@"%@",video.name); //播放视频(调用系统提供的视频播放器) NSString *videoUrl=[NSString stringWithFormat:@"http://localhost:8080/MJServer/%@",video.url]; //NSURL *url=[NSURL URLWithString:videoUrl]; NSURL *url=Url(video.url); MPMoviePlayerViewController *player=[[MPMoviePlayerViewController alloc]initWithContentURL:url]; //显示播放器 [self presentViewController:player animated:YES completion:nil]; } @end
|