为什么NSBundle.MainBundle.GetUrlForResource返回null

时间:2019-07-18 11:05:28

标签: c# xamarin xamarin.ios uiwebview

我正在使用UIWebView来查看本地HTML文件。我的文件名为 NoWiFi.html ,并具有以下路径Resources / NoWiFi.html。我还将Build Action设置为BundleResource,并尝试:

string name = "Resources/NoWiFI.html"
NSURl url;

url = new NSUrl(Path.Combine(NSBundle.MainBundle.BundlePath, name), false);
// and
url = NSBundle.MainBundle.GetUrlForResource("NoWiFi", "html"); // returns null 

webView.LoadRequest(new NSUrlRequest(url));

xamarins documentation中一样 但随后出现错误:在此服务器上找不到请求的URL

为什么我的代码找不到文件?

2 个答案:

答案 0 :(得分:1)

因为您加载了本地html文件,所以您应该使用

import React, { Component } from "react";
import ReactDOM from "react-dom";

import CreatableSelect from "react-select/creatable";
import { createFilter } from "react-select";
import { colourOptions } from "./colourOptions.js";

export default class CreatableMulti extends Component {
  handleChange = (newValue, actionMeta) => {
    console.group("Value Changed");
    console.log(newValue);
    console.log(`action: ${actionMeta.action}`);
    console.groupEnd();
  };

  handleIsValidNewOption = (inputValue, selectValue, selectOptions) => {
    console.log(inputValue, selectOptions);
    // Check for the same value --> ASD === ASD ?
    const exactValueExists = selectOptions.find(el => el.value === inputValue);
    // Check if the value has a valid length.
    // Without this, it will show create option for empty values.
    const valueIsNotEmpty = inputValue.trim().length;
    // If true show create option.
    return !exactValueExists && valueIsNotEmpty;
  };

  render() {
    return (
      <CreatableSelect
        isMulti={true}
        onChange={this.handleChange}
        options={colourOptions}
        filterOption={createFilter({ ignoreCase: false })}
        isValidNewOption={this.handleIsValidNewOption}
      />
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<CreatableMulti />, rootElement);

isDir :一个布尔值,它指定在解析相对路径分量时是否将路径视为目录路径。如果路径指示目录,则传递True;否则,传递False。

答案 1 :(得分:0)

由于某种有线原因,一旦我重命名了文件,我的问题就自动解决了,如果其他人想加载本地HTML文件,我的代码如下所示:

NSUrl url = NSBundle.MainBundle.GetUrlForResource("NoWiFi", "html");
webView.LoadRequest(new NSUrlRequest(url));

如果在使用调试器检查时url对象为null,请确保本地文件(在我的情况下为NoWiFi.html)将Build Action设置为:BundleResource,并且如果NSUrl对象仍为null,请尝试重命名文件