Ответ 1
Использование:
http://www.youtube.com/v/XXXXXXX
вместо:
http://www.youtube.com/watch?v=XXXXXXX
Найдено здесь: https://devforums.apple.com/message/705665#705665
Я хочу воспроизвести видео 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
Использование:
http://www.youtube.com/v/XXXXXXX
вместо:
http://www.youtube.com/watch?v=XXXXXXX
Найдено здесь: https://devforums.apple.com/message/705665#705665
Может быть, мой метод перевода URL-адреса 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;
}
Я решил это, используя следующий 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-адреса и URL-адреса YouTube. Вероятно, это использование тега embed и использование типа application/x-shockwave-flash. Теперь он отлично работает на iOS 6 GM.
Скорее всего, с этой ошибкой есть массив где-то, через который вы проходите, но в какой-то момент вы вызываете какой-то метод, который пытается достичь чего-то, что находится за пределами массива.
Например, такой код приведет к ошибке за пределами границ:
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, потому что программа пытается вернуть элемент из индекса, который фактически не существует в массиве.
Итак, проверьте все свои массивы и убедитесь, что этого не происходит.