iOS – 由于parsing错误,UIWebView无法正常工作
我想在我的应用程序中播放Youtubevideo。 所以,我写了下面的代码
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
使用:
http://www.youtube.com/v/XXXXXXX
代替:
http://www.youtube.com/watch?v=XXXXXXX
在这里find: https : //devforums.apple.com/message/705665#705665
也许我的方法翻译YouTubeurl到正确的格式将帮助你:
+ (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; }
我用下面的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和YouTubeurl无关。 这可能是使用embedded标签,并使用typesapplication / x-shockwave-flash。 它现在在iOS 6 GM上工作得很好。
机会是,有了这个错误,有一个数组在某个地方,你正在经历,但在某个时候,你调用一些方法,最终试图达到超出arrays的东西。
例如,像这样的代码会产生一个超出界限的错误:
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,因为程序试图从实际上不存在于数组中的索引返回一个项目。
所以检查你的所有arrays,确保没有发生。