我想在我的应用中播放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
答案 0 :(得分:52)
使用:
http://www.youtube.com/v/XXXXXXX
而不是:
http://www.youtube.com/watch?v=XXXXXXX
答案 1 :(得分:12)
也许我将youtube网址翻译为正确格式的方法可以帮助您:
+ (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;
}
答案 2 :(得分: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>
它与使用短网址和YouTube网址无关。它可能使用embed标签并使用application / x-shockwave-flash类型。它现在在iOS 6 GM上完美运行。
答案 3 :(得分:-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,因为程序试图从一个实际上不存在于数组中的索引返回一个项目。
请检查所有阵列并确保没有发生。