SwiftにiOSアプリケーションを作成しています。これは、さまざまな静的HTMLファイルをWKWebView
に表示する必要があります。iOS - バンドルでNIBをロードできません
表示するファイルの名前として@IBInspectable
プロパティを持つView Controllerを作成します。 HTMLViewController
は指定されたファイルをロードし、WKWebView
を作成して表示します。私は、ビューを(または私のデバイス上)シミュレータでアプリを実行し、ロードすると
、私はXcodeのコンソールで、次のエラーメッセージが表示されます:
設定に失敗しました(filePathに)ユーザーが定義した検査プロパティを(MyAppの .HTMLViewController)上:バンドル内NIBをロードできませんでした。「NSBundle < /ユーザ/ 私 /ライブラリ/開発/ CoreSimulator /デバイス/ A5982A49-71CD-4F06-ABD7-01EBBF001698 /データ/コンテナ/バンドル/アプリケーション/ 032D479A-091B-4FAB-9CB8-82DC72B99E89/MyApp .app >(ロード済み) '名前付き' pyN-vU-Kur-view -0DN-tc-q8g '
アプリが読み込まれて実行されます。 HTMLViewControllerは、UITableView上のアクセサリーからの "ショー"セグメンテーションに設定されています。アクセサリーをタップするときだけ、このエラーが表示されます。アプリはまだ(空の)ビューを表示していますが、ナビゲーションコントローラを使ってUITableViewに戻っても問題ありません。
grep
を使用すると、pyN-vU-Kur
がView ControllerのオブジェクトIDであり、0DN-tc-q8g
がその内部のUIViewのIDであることがわかりました。
ビルドフェーズを確認し、ストーリーボードが[バンドルリソースのコピー]セクションに表示されていることに注意してください。私はストーリーボードでリファレンスが壊れてしまったので、シーンを削除して再作成したのですが、同じエラーが表示されているのかもしれません。また、インスペクタでターゲットメンバーシップをチェックする方法についていくつかの記事がありました。私は、HTMLファイル、ストーリーボード、ビューコントローラを含むcontent
フォルダにすべてターゲットメンバーシップボックスがチェックされていることを確認しました。
デバッグは(私がコンソールにログインし、コンテンツいた)とapplyContent
メソッドが呼び出されているHTMLファイルがロードされていることを明らかにし、エラーがWKWebView()
への呼び出しで発生しているようです。このエラーの原因となっている何
import UIKit
import WebKit
@IBDesignable
class HTMLViewController: UIViewController {
@IBInspectable
var filePath: String! = "" {
didSet {
if let path = Bundle.main.path(forResource: filePath, ofType: "html", inDirectory: "content") {
do {
let contents = try String(contentsOfFile: path)
self.applyContent(html: contents)
} catch {
print("problem reading file \(filePath)")
}
} else {
print("problem locating file \(filePath)")
}
}
}
func applyContent(html: String) {
let webView = WKWebView(frame: self.view.bounds)
webView.loadHTMLString(html, baseURL: nil)
self.view.addSubview(webView)
}
}
、そしてどのように私はそれを修正することができます:
私HTMLViewController.swift
のコードは以下のでしょうか?私はSwiftとiOSの開発には比較的新しいので、何か基本的なものを見逃しているかもしれません。
あなたはplistの中に「メインnibファイルのベース名」に「メインストーリーボードファイルベース名」から変更していますか? –
@Nazmulいいえ、私はそれをplistで変更しませんでした。私はちょうどそれを試み、アプリはまったく起動しません - それはすぐに似たようなエラーでクラッシュしますが、今はメインを見つけることができません。私の場合、アプリケーションは読み込まれて実行されますが、ビューに移動するとエラーが表示されます。また、アプリをクラッシュさせることもありません(以前のビューに戻っても問題ありません)。これらの詳細で質問を更新します。 – Ben
新しいシーンのストーリーボードのバンドルIDを変更する –