我正在开发一个ios框架(可以使用cocoapods进行安装)。调用此框架的方法时,它将在safari中打开一个url。如果其他某个应用程序能够使用通用链接处理该网址,则它将启动该应用程序。
我试图致电(在ios 9.3模拟器中与目标部署ios 8.0
[[UIApplication sharedApplication] openURL:url];
上面的代码可在任何ios应用中完美运行。但是,当我将相同的代码放入另一个应用程序中包含的框架中时,它会给出异常,并导致应用程序崩溃。
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString scheme]: unrecognized selector sent to instance 0x7fc070717e00'
框架内部的工作方式是否有所不同?什么是正确的方法。在此示例中,我尝试打开常规的https链接。
谢谢
最佳答案
由于这可能对其他人有用,因此似乎是导致此问题的原因:
[[UIApplication sharedApplication] openURL:url];
调用的参数实际上不是
NSURL
,而是NSString
,因此在过程中抛出了NSInvalidArgumentException
-在说明中提示了错误的类型。但是,编译器应至少在此处发出警告。
在编辑之前,提到了一种替代方法:
[[UIApplication sharedApplication] openURL:url options:nil completionHandler:^(BOOL success) {
NSLog(@"opened url %d", success);
}];
失败的原因有所不同:该方法仅在iOS 10之后可用,因此在运行iOS 9.3的测试环境中会抛出
NSInvalidArgumentException
。关于ios - 从ios框架启动应用程序或在 Safari 中打开链接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40047242/