NSData的NSString返回nil

时间:2015-06-24 16:33:38

标签: ios objective-c parse-platform nsstring nsdata

所以我使用的是Parse(很可爱),我正在从解析服务器下载文件(短视频文件 - 不超过1mb)到我的应用程序。现在它的工作方式是(通过文档)..

PFFile* videoFile = [[tempArray objectAtIndex:i] objectForKey:@"track"];


[videoFile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
       if (!error) {
           NSString* dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
           NSURL* videoURL = [NSURL URLWithString:dataString];
           // now do something with this videoURL (i.e. play it!)
           [data writeToFile:@"trackFile" atomically:YES];
                NSURL *filePath = [NSURL fileURLWithPath:@"trackFile"];
                NSLog(@"File Path: %@",filePath);

                AVAsset* asset = [AVAsset assetWithURL:filePath];
                AVPlayerItem* playerItem = [[AVPlayerItem alloc] initWithAsset:asset];

       }
}

在下载完成时,您将被禁止从数据创建一个字符串,然后从该字符串创建一个url。唯一的问题是 - dataString总是返回NULL / nil。我已经确认data属性不是空的,实际上确实保存了视频数据。为什么会这样?任何帮助将不胜感激。提前谢谢!

2 个答案:

答案 0 :(得分:0)

  

我已经确认数据属性不为空,实际上确实保存了视频数据。

视频数据不是UTF-8字符串。它绝对不是URL的UTF-8字符串表示。所以,当你说“将这个视频数据解释为UTF-8”时,Cocoa正确地回答它不是UTF-8(因为它是视频数据)。

最简单的解决方案是将此内容写入磁盘,然后播放该文件。

答案 1 :(得分:0)

首先需要确定的事情:

  1. NSData对象实际上是否有任何数据,即data.length> 0?
  2. NSData对象是否保存视频数据 OR 视频数据的网址(不完全清楚)?
  3. 假设NSData对象持有url并且它的长度大于0,那么你可能想尝试:

    NSString* dataString = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];