美文网首页
NSURL简单用法

NSURL简单用法

作者: 严谨风 | 来源:发表于2016-11-02 17:55 被阅读156次

    前言

    今天在使用AVKit进行视频播放的时候发现无法播放本地视频,而只能播放网络视频,在仔细查看了一遍代码后忽然想到了加载本地资源时应该用fileURLWithPath:方法而不是URLWithString:方法:

    NSURL *url = [NSURL fileURLWithPath:@"user/path/video.mov"];
    NSLog(@"%@", [url absoluteURL]);
    AVPlayer *player = [AVPlayer playerWithURL:url];
    AVPlayerViewController *playerViewController = [AVPlayerViewController new];
    playerViewController.player = player;
    [self presentViewController:playerViewController animated:YES completion:nil];
    

    于是问题就解决了。
    但是为什么会这样呢?在网上简单的Google了一下没有找到满意的文章,随意决定自己动手写一篇,于是便有了这篇文章。

    正文

    1. fileURLWithPath:方法和URLWithString:方法的区别。
      fileURLWithPath:方法自带一个baseURL,默认值为file:///。使用fileURLWithPath:创建出的url的绝对路径会在path的首部插入file:///。而URLWithString:不会。
      这样造成的后果是什么呢?就是加载本地数据时,一般使用fileURLWithPath:方法,加载网络数据时使用URLWithString:方法。
      当然,这不是绝对的,你同样可以用URLWithString:方法的扩展方法来创建可以加载本地数据的URL,例如:
    NSURL *url = [NSURL URLWithString:@"user/path/video.mov" relativeToURL:[NSURL URLWithString:@"file:///"]];
    
    1. 使用Bookmarks.
      Bookmarks是个很有意思的特性,一旦为某个URL生成了bookmarks,那么这个路径指向的文件或者文件夹不论是更换位置还是重命名,通过bookmarks我们总能找到它。使用代码如下:
    /// 通过url生成一个NSData类型的bookmark并做持久化处理
    NSData *bookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationSuitableForBookmarkFile includingResourceValuesForKeys:nil relativeToURL:nil error:nil];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:bookData forKey:@"boormark"];
    [defaults synchronize];
    
    /// 拿到NSData类型的bookmark并用来创建一个url
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSData *data = [defaults objectForKey:@"boormark"];
    if (data) {
          NSURL *url = [NSURL URLByResolvingBookmarkData:data options:0 relativeToURL:nil bookmarkDataIsStale:nil error:nil];
          NSLog(@"bookmark ------------- %@", url);
    }
    

    以后如果有其他用到的地方,我可能还会更新。

    相关文章

      网友评论

          本文标题:NSURL简单用法

          本文链接:https://www.haomeiwen.com/subject/akwvuttx.html