在UIWebView的这个子类中,我希望设置一个方法来创建嵌入式YouTube视频。但是,无论我如何编辑这段代码(我在网上找到的大部分代码),总是会给我一个警告:
self = [[UIWebView alloc] initWithFrame:frame];
我不确定这是因为Xcode 4.2还是iOS 5,还是因为我使用的是自我。实际上有什么问题吗?如果是这样,我该如何解决?
整个方法代码:
- (videosView *)initWithStringAsURL:(NSString *)urlString frame:(CGRect)frame;
{
if (self = [super init])
{
// Create webview with requested frame size
self = [[UIWebView alloc] initWithFrame:frame];
// HTML to embed YouTube video
NSString *youTubeVideoHTML = @"<html><head>\
<body style=\"margin:0\">\
<embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \
width=\"%0.0f\" height=\"%0.0f\"></embed>\
</body></html>";
// Populate HTML with the URL and requested frame size
NSString *html = [NSString stringWithFormat:youTubeVideoHTML, urlString, frame.size.width, frame.size.height];
// Load the html into the webview
[self loadHTMLString:html baseURL:nil];
[self setUserInteractionEnabled:YES];
}
return self;
}
答案 0 :(得分:3)
您已经分配了内存(由this
指向),所以不要alloc
更多:
self = [super initWithFrame:frame];
而且,看一点,你不应该init
超级两次。将该语句移至if
,而不是普通super init
:
if (self = [super initWithFrame:frame]) {...}
答案 1 :(得分:0)
在您的上下文中,self指的是您的类的实例(调用MyWebView:UIWebView)
从课堂外,我希望你创建一个像这样的实例
MyWebView *myInstance = [[MyWebView alloc] initWithStringAsURL:urlString frame:frame]; // release at a later time
在你的init方法中
- (videosView *)initWithStringAsURL:(NSString *)urlString frame:(CGRect)frame;
您可以参考超级
进行初始化self = [super initWithFrame:frame];
if (self != nil) {
// proceed with custom initialization
}
您收到有关不兼容指针类型的投诉,因为
[[UIWebView alloc] initWithFrame:frame];
返回UIWebView,而不是MyWebView