24

アプリでYoutubeビデオを再生したい。だから、私は次のコードを書きました

NSString *embedHTML = @"\
<html><head>\
<style type=\"text/css\">\
body {\
background-color: transparent;\
color: white;\
}\
</style>\
</head><body style=\"margin:0\">\
<embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \
width=\"%0.0f\" height=\"%0.0f\"></embed>\
</body></html>";

NSString* html = [NSString stringWithFormat:embedHTML, videoURL, self.view.frame.size.width, self.view.frame.size.height];  

[videoView loadHTMLString:html baseURL:nil]; 

videoViewはUIWebViewです。これは後でまで問題なく機能していましたが、ビューには何も表示されません。ただの真っ白な眺め。そして、私はこのログを取得しました:

*** WebKit discarding exception: <NSRangeException> *** -[__NSCFString substringToIndex:]: Range or index out of bounds
4

4 に答える 4

52

使用する:

http://www.youtube.com/v/XXXXXXX

それ以外の:

http://www.youtube.com/watch?v=XXXXXXX

ここにあります: https://devforums.apple.com/message/705665#705665

于 2012-09-13T21:32:43.730 に答える
12

おそらく、YouTube URL を正しい形式に変換するための私の方法が役立つでしょう:

+ (NSString*)getYTUrlStr:(NSString*)url
{   
    if (url == nil)
        return nil;

    NSString *retVal = [url stringByReplacingOccurrencesOfString:@"watch?v=" withString:@"v/"];

    NSRange pos=[retVal rangeOfString:@"version"];
    if(pos.location == NSNotFound)
    {
        retVal = [retVal stringByAppendingString:@"?version=3&hl=en_EN"];
    }
    return retVal;
}
于 2012-10-18T13:36:28.880 に答える
5

次のHTMLを使用して解決しました:

<!doctype html>\
<html>\
<style>body{padding:0;margin:0;}</style>\
<iframe width=\"320\" height=\"367\" src=\"http://www.youtube.com/embed/rVd0XWALswk?rel=0\" frameborder=\"0\" allowfullscreen></iframe>\
</html>

ショート URL や YouTube の URL の使用とは関係ありません。おそらく埋め込みタグを使用し、タイプ application/x-shockwave-flash を使用しています。iOS 6 GM で問題なく動作するようになりました。

于 2012-09-14T04:38:13.267 に答える
-1

おそらく、そのエラーが発生した場合、通過している配列がどこかにある可能性がありますが、ある時点で、配列を超えた何かに到達しようとするメソッドを呼び出します。

たとえば、次のようなコードは範囲外エラーを生成します。

NSArray *array = [[NSArray alloc] initWithObjects:objInPositionZero, objInPositionOne, objInPositionTwo, nil];
NSObject *obj;

for (int i=0; i<3, i++)
{
    obj = [array objectAtIndex: (i+6)
}
//Do something with obj.

プログラムが実際には配列に存在しないインデックスから項目を返そうとしているため、NSRangeException が生成されます。

したがって、すべてのアレイをチェックして、それが発生していないことを確認してください。

于 2012-09-13T04:35:58.373 に答える