【问题标题】:No visible @interface for 'UIApplication' declares the selector 'openUrl:'“UIApplication”没有可见的@interface 声明选择器“openUrl:”
【发布时间】:2016-12-28 03:30:57
【问题描述】:

我到底错过了什么???我不断得到

“UIApplication”没有可见的@interface 声明选择器“openUrl:”

#import "ViewController.h"

@interface ViewController ()
@property (strong, readwrite, nonatomic) IBOutlet UIWebView *webView;

@end

@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
www.delegate = self;
[www loadRequest:[NSURLRequest
                  requestWithURL:[NSURL      URLWithString:@"http://www.google.com"]]];
}

- (BOOL) webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
 navigationType:(UIWebViewNavigationType)navigationType
{

if ( navigationType == UIWebViewNavigationTypeLinkClicked ) {
    NSLog(@"%@", [[request URL] absoluteString] );


    [[UIApplication sharedApplication] openUrl:[[request URL]         absoluteString]];
}

return YES;
}



@end

【问题讨论】:

  • 耐心点,蚂蚱。

标签: ios objective-c nsurl uiapplication openurl


【解决方案1】:

为什么会出现这个错误,你是不是打错了?

是的,您的代码不正确。

[[UIApplication sharedApplication] openUrl:[[request URL]         absoluteString]];

上面的代码显示错误的语法,因为你调用absoluteString。所以它肯定显示错误。

openURL 没有这样的参数 'NSString'

所以你想要做的是,如果你的 absoluteString 有 URL,你可以用 URLWithString 调用字符串 url 并且你可以直接调用那个 URL

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"https://www.google.co.in/#q=STACKOVERFLOW+IOS+QUESTIONS"]];

【讨论】:

    【解决方案2】:

    据推测,错误消息实际上不是指定根本没有方法称为openURL:,而是UIApplication 上没有方法称为openURL: 需要NSString 参数,因为您正试图通过这里。

    以下应该起作用:

    [[UIApplication sharedApplication] openURL:[request URL]];
    

    如您所见,from the documentationopenURL: 采用 NSURL 参数,而不是 NSString

    【讨论】:

    • 需要注意拼写和大小写。你所有的答案都提到了openURL:,除了你说应该工作的代码是openUrl:
    • 已修复,谢谢。复制意大利面编程的危险也适用于 SO!
    猜你喜欢
    • 2022-08-05
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多