将核心数据记录从 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
函数。
--请注意--
我在没有测试的情况下编写了上面的代码,今天早上我还没有喝足够的咖啡。所以,这个想法是合理的,但语法可能需要一点调整。
我在 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
函数。
--请注意-- 我在没有测试的情况下编写了上面的代码,今天早上我还没有喝足够的咖啡。所以,这个想法是合理的,但语法可能需要一点调整。