0

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

这是我在 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函数只会在视图控制器的生命周期中被调用一次。因此,您对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 回答