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,确保没有发生。