簡體   English   中英

如何在iOS中將NSdata轉換為字符串

[英]How to convert NSdata to string in ios

我正在嘗試從服務器的tableview查看視頻,因此使用ios中的json從服務器獲取視頻。 我已經成功地將url連接到nsurl連接,並且將nsdata附加到一切都很好,但是問題是當將nsdata轉換為通過null的字符串時。

這是我用於url連接的代碼:

-(void)setDataSource:(vedios *)inVideosObj
{
    //here I'm connecting the nsobject to outlets of the tablecell so here have successfully connected to url connection video is nsobject

    self.titile.text = inVideosObj.title;

    url =[NSURL URLWithString:inVideosObj.video];
    NSURLRequest *request =[NSURLRequest requestWithURL:url];

    NSLog(@"UDSA %@  %@ ",url,request);

    connection =[[NSURLConnection alloc] initWithRequest:request delegate:self];
    self.responseData = [[NSMutableData alloc]init];
}

之后,我檢查了在控制台中傳遞的rul請求,我得到的網址是這樣的:

2014-01-25 13:00:35.587 video[1835:a0b] UDSA http://localhost/image/vedios/reddy.mp4  <NSURLRequest: 0xb992c40> { URL: http://localhost/image/vedios/reddy.mp4 } 

在附加到nsdata之后,這是代碼:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
{
     [self.responseData appendData:data];

     //NSLog(@"dad %@",self.responseData);
}

再次打印出我已添加到控制台的nsdata,如下所示:

  2014-01-25 14:07:42.024 video[1911:a0b] dad <0000001c 66747970 6d703432 00000000    69736f6d 61766331 6d703432 00008d64 6d6f6f76 0000006c 6d766864 00000000 c8a43177 c8a43177 00000258 00010b78 00010000 01000000 00000000 00000000 00010000 00000000 00000000 00000000 00010000 00000000 00000000 00000000 40000000 00000000 00000000 00000000 00000000 00000000 00000000 00000003 00000015 696f6473 00000000 1007004f ffff2915 ff000052 19747261 6b000000 5c746b68 64000000 01c8a431 77c8a431 77000000 01000000 0000010b 6d000000 00000000 00000000 00010000 00000100 00000000 00000000 00000000 

現在在這里,我試圖將nsdata轉換為字符串並傳遞movieplayer

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSString *urlString = [[NSString alloc]initWithData:self.responseData encoding:NSASCIIStringEncoding];

    // NSString *urlString = [NSString stringWithUTF8String:[self.responseData bytes] ];

    NSLog(@"data :%@",urlString);
    MPMoviePlayerController *mov = [[MPMoviePlayerController alloc]initWithContentURL: [NSURL URLWithString:urlString]];
//  MPMoviePlayerController *mov = [[MPMoviePlayerController   alloc]initWithContentURL:[NSURL URLWithString:urlString]];
    NSLog(@"length %d",[self.responseData length]);

    // MPMoviePlayerController *mov = [[MPMoviePlayerController   alloc]initWithContentURL:url];

    self.movieplayer = mov;
    [self.movieplayer.view setFrame:CGRectMake(10,20, 100, 100)];

    // self.movieplayer.movieSourceType = MPMovieSourceTypeFile;
    [self.contentView addSubview:self.movieplayer.view];
    [self.movieplayer prepareToPlay];
    [self.movieplayer play];
}

轉換視頻后不播放tablevewcell,現在我將轉換后的nsdata打印出來,在控制台中顯示為null

2014-01-25 14:12:18.622 video[1934:a0b] data :

我很長時間都沒有卡住的東西,我擁有將nsdata轉換為顯示相同null的字符串的所有功能

這是我為解決方案研究而綁定的鏈接links1 link2

沒有任何效果,請幫助我在做錯事情時如何解決此問題

這是self.responsedata的輸出

014-01-25 14:24:08.151 video[2019:a0b] reponse=<0000001c 66747970 6d703432 00000000 69736f6d 61766331 6d703432 00008d64 6d6f6f76 0000006c 6d766864 00000000 c8a43177 c8a43177 00000258 00010b78 00010000 01000000 00000000 00000000 00010000 00000000 00000000 00000000 00010000 00000000 00000000 00000000 40000000 00000000 00000000 00000000 00000000 00000000 00000000 00000003 00000015 696f6473 00000000 1007004f ffff2915 ff000052 19747261 6b000000 5c746b68 64000000 01c8a431 77c8a431 77000000 01000000 0000010b 6d000000 00000000 00000000 00010000 00000100 00000000 00000000 00000000 00000100 00000000 00000000 00000000 00400000 00000000 

您在這里做的事很奇怪

   NSString *urlString = [[NSString alloc]initWithData:self.responseData encoding:NSASCIIStringEncoding];

   MPMoviePlayerController *mov = [[MPMoviePlayerController alloc]initWithContentURL: [NSURL URLWithString:urlString]];

在您的self.responseData中,您已獲得所需mp4文件的NSData。 您只需要存儲它

[self.responseData writeToFile:pathToFile atomically:NO];

在“文檔”目錄中保持原樣。 然后,您應該使用文件pathToFile的路徑創建本地NSURL

NSURL *localURL = [NSURL fileURLWithPath:pathToFile];

並使用它

MPMoviePlayerController *mov = [[MPMoviePlayerController alloc]initWithContentURL:localURL];

inVideosObj.video中存在哪些數據?

如果它是視頻的網址,則您應該直接在MPMoviePlayerController傳遞此網址。

MPMoviePlayerController *mov = [[MPMoviePlayerController alloc] initWithContentURL: [NSURL URLWithString:inVideosObj.video]];

如果其中包含視頻數據,則需要將該數據寫入文件,並在MPMoviePlayerController提供文件路徑。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"video.mp4"];

[inVideosObj.video writeToFile:path atomically:YES];

NSURL *videoUrl= [NSURL fileURLWithPath:path];

MPMoviePlayerController *mov = [[MPMoviePlayerController alloc] initWithContentURL: videoUrl];

如果您的數據不是以null終止的,這就是這個,

NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

如果您的數據以null結尾,請嘗試以下操作:

NSString *str = [NSString stringWithUTF8String:[data bytes]];

編輯

對此進行檢查,可能會有所幫助。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM