将核心数据记录从 UITextView 传递到 UIWebView

Passing Core Data Record from UITextView to UIWebView

我在 UITextView 和 UIWebView 之间传递核心数据记录时遇到问题。这背后的想法是将用户输入的 HTML 代码加载到要预览的 Web 视图中。我有一个主要问题,那就是;我的用户通过 HTML 将在第二次通过时加载(或第二次单击操作按钮)。本质上,UIWebView 显示的是以前的修订版,而不是 HTML 样板代码的最新修订版。更让我困惑的是,在 UIWebView 的 return 上,我设置了删除记录的代码,因此它(记录)在第二次传递时甚至不应该存在。

这是我的 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)
}

非常感谢您的帮助!这是我第一次构建应用程序,也是第一次学习编程语言。所以,如果我遗漏了任何重要细节,请原谅我。

您的 viewDidLoad 函数在视图控制器的生命周期中只会被调用一次。因此,您对 html 字符串所做的任何后续更改都将在 viewDidLoad 发生后发生。

如果您有多个控制器,请尝试将您的代码移动到 viewDidAppear,或者更好的是,将其放在自己的 func 中并调用该函数。

例子

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

如果你真的想变得很花哨,你可以在 htmlPreviewCode

didSet 方法中做到这一点
 var htmlPreviewCode : String {
        didSet {
                webview.loadHTMLString(htmlPreviewCode, baseURL: nil)
         }
       }

现在,每次 htmlPreviewCode 更改时,它都会更新 webView,您不需要任何 updateUI 函数。

--请注意-- 我在没有测试的情况下编写了上面的代码,今天早上我还没有喝足够的咖啡。所以,这个想法是合理的,但语法可能需要一点调整。