YouTube WebUIViewDelegate - respondsToSelector:被发送到错误的实例

时间:2013-11-26 11:44:04

标签: ios objective-c youtube

以下是我创建YouTube视频的MyYouTube课程的摘录:

@interface MyYouTube : NSObject <UIWebViewDelegate>
@end

@implementation

- (void) createYouTubeVideoInView: (UIView*) mainView withContent: (NSDictionary*) contentDict {

    // create url request
    NSString * compiledUrl=[[NSString alloc] initWithFormat:@"http://_xxx_.com/app/youtube.php?yt=%@",[contentData objectForKey:@"cnloc"]];
    NSURL * url=[[NSURL alloc] initWithString:compiledUrl];
    NSURLRequest * request=[[NSURLRequest alloc] initWithURL:url];

    // create the web view
    webView=[[UIWebView alloc] initWithFrame:viewRef.bounds];
    [webView loadRequest:request];
    [webView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
    [[webView scrollView] setScrollEnabled:NO];
    [[webView scrollView] setBounces:NO];
    [webView setMediaPlaybackRequiresUserAction:NO];
    [webView setDelegate:self];

    NSLog(@"YOUTUBE: self: %@",self);
    NSLog(@"YOUTUBE: delegate: %@",webView.delegate);

    // add the webview to the main view
    [mainView addSubview:webView];
}

这就是事情:

如果我将Delegate设置为nil,那么YouTube视频就可以正常播放。

BUT

如果我将Delegate设置为self,则应用程序崩溃,控制台显示以下内容:

YOUTUBE: self: <MyYouTube: 0x16e05f70>
YOUTUBE: delegate: <MyYouTube: 0x16e05f70>
*** -[MyYouTube respondsToSelector:]: message sent to deallocated instance 0x16e2f420

有人可以向我解释为什么实例不同吗?

为什么在与代理不同的实例上调用respondsToSelector:?怎么能解决这个问题?

非常感谢。

1 个答案:

答案 0 :(得分:1)

我认为原因是mainView可以发布,导致在退出createYouTubeVideoInView方法后发布你的webview。

确保mainView仍然存在。在调用此方法之前将其放在另一个视图上。

确保您对MyYouTube对象(NSObject)有强大的参考价值。例如,使它成为实例变量。