0

UITextView と UIWebView の間でコア データ レコードを渡す際に問題が発生しています。この背後にある考え方は、ユーザーが入力した HTML コードを Web ビューにロードしてプレビューすることです。私は 1 つの大きな問題を抱えています。ユーザーが渡した HTML は、2 回目のパス (またはアクション ボタンの 2 回目のクリック) で読み込まれます。基本的に、UIWebView は、HTML ボイラープレート コードの最新のリビジョンではなく、以前のリビジョンを表示しています。私をさらに混乱させているのは、UIWebView からの戻り時に、レコードを削除するようにコードを設定しているため、2 回目のパスでもレコード (レコード) が存在しないことです。

これが私のUITextViewにあるコードです

    @IBAction func previewCompile(sender: AnyObject) {
    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as!  AppDelegate
    let context: NSManagedObjectContext = appDel.managedObjectContext
    let userCode = NSEntityDescription.insertNewObjectForEntityForName("Data", inManagedObjectContext: context)
    let request = NSFetchRequest(entityName: "Data")
    request.returnsObjectsAsFaults = false

    do {
        userCode.setValue(codeView.text, forKey: "code")
        htmlPreviewCode = (userCode.valueForKey("code") as? String)!
        try context.save()

        print(htmlPreviewCode)
    } catch {
        print("No record was saved!")
    }

}

受信UIWebViewのコードは次のとおりです

var html = String()

    @IBOutlet weak var deleteRecord: UIButton!

    @IBAction func goBACK(sender: AnyObject) {

    let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let context: NSManagedObjectContext = appDel.managedObjectContext
    let request = NSFetchRequest(entityName: "Data")
    request.returnsObjectsAsFaults = false

    do {
        let results = try context.executeFetchRequest(request)
        if results.count > 0 {
            for result: AnyObject in results {
                context.deleteObject(result as! NSManagedObject)
                print("Record Deleted")
            }
        }

    } catch {
        print("Record failed to delete!")
    }

}

    @IBOutlet weak var webview: UIWebView!

    override func viewDidLoad() {
         super.viewDidLoad()
              html = htmlPreviewCode
              webview.loadHTMLString(html, baseURL: nil)
}

どんな助けでも本当に感謝しています! これは私の最初のアプリ構築であり、プログラミング言語を学ぶのは初めてです。そのため、重要な詳細が欠落している場合はご容赦ください。

4

1 に答える 1

0

関数viewDidLoadは、View Controller のライフサイクルで 1 回だけ呼び出されます。したがって、html文字列に加えた後続の変更は、発生した後に発生しますviewDidLoad

viewDidAppear複数のコントローラーがある場合は、コードを に移動してみてください。それよりも良いのは、コントローラーを独自に配置してそのfunc関数を呼び出すことです。

 func updateUI() {
          html = htmlPreviewCode
          webview.loadHTMLString(html, baseURL: nil)
       }

あなたが本当に派手になりたいなら、あなたのdidSetメソッドでこれを行うことができますhtmlPreviewCode

 var htmlPreviewCode : String {
        didSet {
                webview.loadHTMLString(htmlPreviewCode, baseURL: nil)
         }
       }

これで、htmlPreviewCode が変更されるたびに webView が更新され、updateUI関数は必要なくなります。

-- 注意してください -- 上記のコードをテストせずに書いたので、今朝はまだコーヒーを十分に飲んでいません。したがって、アイデアは健全ですが、構文を少し調整する必要があるかもしれません。

于 2015-09-13T13:03:52.683 に答える