【问题标题】:Passing Core Data Record from UITextView to UIWebView将核心数据记录从 UITextView 传递到 UIWebView
【发布时间】:2015-12-09 09:33:54
【问题描述】:

我在 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)
}

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

【问题讨论】:

  • 所有这些代码sn-ps都在同一个控制器中吗? (他们应该是。)

标签: ios iphone core-data swift2 xcode7-beta6


【解决方案1】:

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

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

例子

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

如果你想变得非常花哨,你可以在htmlPreviewCodedidSet 方法中做到这一点

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

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

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

【讨论】:

  • 谢谢!将其移入“func”并在viewWillApper 中调用它非常有效!我认为同样重要的是要注意,对于任何面临类似问题的人,我使用viewDidDisappear 并调用func 来恢复为html = String( )
猜你喜欢
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多