颤振flutter_webview_plugin错误[NSNull长度]:无法识别的选择器发送到ios上的实例

Posted

技术标签:

【中文标题】颤振flutter_webview_plugin错误[NSNull长度]:无法识别的选择器发送到ios上的实例【英文标题】:Flutter flutter_webview_plugin error [NSNull length]: unrecognized selector sent to instance on ios 【发布时间】:2021-12-29 08:06:49 【问题描述】:

我正在使用flutter_webview_plugin: ^0.4.0 加载网站。该应用程序在 android 上运行良好。在 IO 上出现错误

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull length]: unrecognized selector sent to instance 0x1fb513aa0'

对于 Xcode 中文件 FlutterWebviewPlugin 中的行 NSURL *scopeUrl = [NSURL fileURLWithPath:localUrlScope];

我已经添加了

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
</dict>

来自我 Info.plist 中的文档。

我尝试添加

<key>io.flutter.embedded_views_preview</key>
<string>YES</string>

在我的Info.plist 中,但它不起作用。我还尝试用&lt;true/&gt; 替换&lt;string&gt;YES&lt;/string&gt;,但也没有用。

我已尝试将目标 IO 版本从 9.0 设置为 13.0,但问题仍然存在。

我正在使用此软件包提供的文件选择器和警报对话框功能,因此我无法使用其他任何功能。

我已经用Uri.encodeFull() 包装了网址。

发生错误的代码块如下:

if (@available(ios 9.0, *)) 
                    if(localUrlScope == nil) 
                        [self.webview loadFileURL:htmlUrl allowingReadAccessToURL:htmlUrl];
                    
                    else 
                        NSURL *scopeUrl = [NSURL fileURLWithPath:localUrlScope]; //ERROR OCCURING HERE
                        [self.webview loadFileURL:htmlUrl allowingReadAccessToURL:scopeUrl];
                    
                 else 
                    @throw @"not available on version earlier than ios 9.0";
                

我运行了flutter doctor,它没有显示任何问题。

每次我更改代码中的某些内容时,我都会删除 Podfile.lockbuild 文件夹,然后运行 ​​flutter clean,这样之前的一些尝试中所做的更改就不会造成任何问题。

我正在使用带有 Dart 2.13.4、Flutter 2.5.0、XCode 13.0 (13A233) 的 M1 Mac

【问题讨论】:

【参考方案1】:

我之前在用这个包做类似的事情时遇到过这个问题,经过长时间的抨击,我从package documentation找到了这个,

专注于它所说的这部分

问题是当您将 withLocalUrl 设置为 true 时,您必须添加 localUrlScope 选项以设置为您的颤振代码中目录的路径,或者您只需从中删除 withLocalUrl:true

由于此选项在 Android 中被忽略,因此它可以正常工作,但对于 iOS,我们需要对此进行具体说明

【讨论】:

这解决了我的问题。谢谢。我错过了文档中的部分,并认为这是一个 IOS 特定的库错误。

以上是关于颤振flutter_webview_plugin错误[NSNull长度]:无法识别的选择器发送到ios上的实例的主要内容,如果未能解决你的问题,请参考以下文章

颤振的支付网关

用于颤振的 Azure 广告 B2C

(颤振)如果没有互联网连接,如何启动静态 html 页面而不是 URL?

flutter_webview_plugin ?????????????????????????????????

flutter_webview_plugin 包的 clearCache 不起作用

flutter_webview_plugin 与dart页面跳转使用