不兼容的指针类型

时间:2011-12-15 03:41:33

标签: iphone objective-c ios youtube xcode4.2

在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;  
}

2 个答案:

答案 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