2016-10-07 1 views
2

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の開発には比較的新しいので、何か基本的なものを見逃しているかもしれません。

+1

あなたはplistの中に「メインnibファイルのベース名」に「メインストーリーボードファイルベース名」から変更していますか? –

+0

@Nazmulいいえ、私はそれをplistで変更しませんでした。私はちょうどそれを試み、アプリはまったく起動しません - それはすぐに似たようなエラーでクラッシュしますが、今はメインを見つけることができません。私の場合、アプリケーションは読み込まれて実行されますが、ビューに移動するとエラーが表示されます。また、アプリをクラッシュさせることもありません(以前のビューに戻っても問題ありません)。これらの詳細で質問を更新します。 – Ben

+0

新しいシーンのストーリーボードのバンドルIDを変更する –

答えて

1

WKWebViewviewに追加しようとしている可能性があります。まだロードされていない場合があります。

IBInspectableは、ビューのロード処理の初期段階で設定されます。 WKWebViewviewDidLoadまたはviewWillAppearに追加してください。

import UIKit 
import WebKit 

@IBDesignable 
class HTMLViewController: UIViewController {  
    @IBInspectable 
    var filePath: String! = "" 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
     if let path = Bundle.main.path(forResource: filePath, ofType: "html", inDirectory: "content") { 
      do { 
       let contents = try String(contentsOfFile: path) 
       let webView = WKWebView(frame: self.view.bounds) 
       webView.loadHTMLString(contents, baseURL: nil) 
       self.view.addSubview(webView) 
      } catch { 
       print("error loading file") 
      } 
     } 
    } 
} 
+1

あなたは絶対に正しいです、 'viewWillAppear'のコードを入れて私の問題を解決しました!投稿した正確なコードは正常に動作しませんでした。ファイルを読み込むために使用したコードで答えを更新する必要がありますか? – Ben

+0

絶対に編集してください!私は頭の上から出ていた。 – ray

関連する問題