以下是我创建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:
?怎么能解决这个问题?
非常感谢。
答案 0 :(得分:1)
我认为原因是mainView可以发布,导致在退出createYouTubeVideoInView方法后发布你的webview。
确保mainView仍然存在。在调用此方法之前将其放在另一个视图上。
确保您对MyYouTube对象(NSObject)有强大的参考价值。例如,使它成为实例变量。