gpt4 book ai didi

ios - 将 CoreData 键传递给新的 ViewController

转载 作者:行者123 更新时间:2023-11-28 06:38:10 25 4
gpt4 key购买 nike

我正在开发我的应用程序的一部分,该部分将用作用户的日志,他们可以在其中添加条目,然后查看或删除它们。我遵循了一些 CoreData 的 Swift 教程,并且我已经确认 CoreData 设置正在运行。但是,我无法将值传递给将在保存后显示日志的 UIViewController。在我试过的一种配置中,它不显示任何数据,在另一种配置中,无论选择什么条目,数据都将保持不变,在下面的设置中,这一行 journalEntryViewer.journalViewerTextView.text = journalTextToPass 返回“found展开可选值时为零。”以下是用作列表的 UITableViewController 的代码:

import UIKit
import CoreData

class JournalCollectionViewer: UITableViewController {
var JournalEntry = [NSManagedObject]()
var journalTextToPass:String!
var journalTitleToPass:String!
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
self.tableView.reloadData()
let appDelegate =
UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "JournalEntry")
do {
let results =
try managedContext.executeFetchRequest(fetchRequest)

JournalEntry = results as! [NSManagedObject]
} catch let error as NSError {
print("Could not fetch \(error), \(error.userInfo)")
}
}
// MARK: - Table view data source

@IBOutlet weak internal var journalCollectionTable: UITableView!


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return JournalEntry.count
}
override func tableView(tableView: UITableView,
cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell =
tableView.dequeueReusableCellWithIdentifier("JournalCell")

let entry = JournalEntry[indexPath.row]

cell!.textLabel!.text =
entry.valueForKey("journalDate") as? String
return cell!
}
func selectedTableCell(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let entry = self.JournalEntry[indexPath.row]

self.performSegueWithIdentifier("ShowEntryViewer", sender: entry)
}
// MARK: - Navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "ShowEntryViewer" {
let journalEntryViewer = segue.destinationViewController as! JournalEntryViewer
journalEntryViewer.self.navigationItem.title = journalTitleToPass
journalEntryViewer.journalViewerTextView.text = journalTextToPass
}
}
}

在查看器 (journalEntryViewer) 的 Swift 文件中,我所做的只是声明类和 UITextView。不用说,我不知所措。任何帮助表示赞赏!

最佳答案

当你在prepareForSegue方法中给IBOutlet对象赋值时,此时它还没有初始化,所以你需要传递字符串对象并将该字符串对象赋值给JournalEntryViewerviewDidLoad 中的 journalViewerTextView

首先像这样在JournalEntryViewer 中声明两个实例变量

var journalTitle: String?
var journalText: String?

现在在 viewDidload 中使用这个变量

override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.title = journalTitle
self.journalViewerTextView.text = journalTitle
}

现在在 JournalCollectionViewerprepareForSegue 方法中传递此 journalTitlejournalText

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "ShowEntryViewer" {
let journalEntryViewer = segue.destinationViewController as! JournalEntryViewer
journalEntryViewer.journalTitle = journalTitleToPass
journalEntryViewer.journalText = journalTextToPass
}
}

新编辑:

你的代码的问题是你没有使用委托(delegate)方法 didSelectRowAtIndexPath 而不是你正在使用其他的 selectedTableCell 是错误的尝试实现 UITableView 的委托(delegate)方法

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let entry = self.JournalEntry[indexPath.row]
self.performSegueWithIdentifier("ShowEntryViewer", sender: entry)
}

现在你正在传递入口对象,所以像这样改变你的prepareForSegue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "ShowEntryViewer" {
let journalEntryViewer = segue.destinationViewController as! JournalEntryViewer
let entry = sender as! NSManagedObject
journalEntryViewer.journalTitle = entry.valueForKey("journalDate") as? String
journalEntryViewer.journalText = entry.valueForKey("journalEntryText") as? String
}
}

关于ios - 将 CoreData 键传递给新的 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38603620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com