ios
  • uiwebview
  • exc-bad-access
  • 2013-11-16 3 views 0 likes 
    0

    Экран в моем приложении должен загружать встроенные видеоролики YouTube. У меня это так:UIWebView loadHTMLString сбой приложения witn EXC_BAD_ACCESS

    NSString *html = @"<iframe id='ytplayer' type='text/html' width='300' height='390' src='http://www.youtube.com/embed/nK8bGHU3d0U?autoplay=1&origin=http://example.com' style=\"background-color: #000000;\" frameborder='0'/>" 
    [self embedYouTube:html frame:CGRectMake(left, 780, 640, 500)]; 
    
    - (void)embedYouTube:(NSString *)urlString frame:(CGRect)frame {  
        NSString *html = [NSString stringWithFormat:urlString, urlString, frame.size.width, frame.size.height]; 
        UIWebView *videoView = [[UIWebView alloc] initWithFrame:frame]; 
        videoView.backgroundColor = [UIColor blackColor]; 
        videoView.opaque = NO; 
        [videoView loadHTMLString:html baseURL:nil]; 
        [self.scrollView addSubview:videoView]; 
    } 
    

    Это работало на некоторое время, но вдруг это вызывает мое приложение к сбою с EXC_BAD_ACCESS. Я сузил его до этой строки:

    [videoView loadHTMLString:html baseURL:nil]; 
    

    Я не уверен, как это исходит. Кроме того, я знаю, что этот EXC_BAD_ACCESS обычно является признаком ошибки памяти, но, похоже, это не так. Я не собираюсь возвращаться на этот экран, просто нажимая его, как только приложение запустится. И он падает.

    Когда я переношу приложение в другое место на моем жестком диске, он отлично работает. Понятия не имею почему.

    ответ

    0

    Этот код не сбой, когда я запускаю его, поэтому я понятия не имею, что это может быть просто поврежденный кеш (несколько раз с очень странным поведением). Однако ваш код не не загружать видео ни, я получил это работаю после внесения следующих изменений:

    в первую строке вашего метода embedYouTube:frame: в:

    NSString *html = [NSString stringWithFormat:@"<html><body><iframe class=\"youtube-player\" type=\"text/html\" width=\"%f\" height=\"%f\" src=\"%@\" allowfullscreen frameborder=\"0\" rel=nofollow></iframe></body></html>", frame.size.width,frame.size.height, urlString]; 
    

    пройти только исходный элемент видео к методу (только URL-адрес видео, без HTML), так что это будет:

    [self embedYouTube:@"http://www.youtube.com/embed/nK8bGHU3d0U?autoplay=1&origin=http://example.com" frame:frame]; 
    
    +0

    Спасибо, @Leijonien. Как вы относитесь к «поврежденному кешу»? Что вы сделали, чтобы исправить это, когда у вас были проблемы с кешем? – Eddy

    +0

    Просто удалив приложение с устройства/симулятора, он должен выполнить чистую установку при следующем запуске приложения. (извините ничего волшебного ;-) – Leijonien

    +0

    Я попробовал, но ошибка все еще там. Благодарю. – Eddy

    Смежные вопросы