Я работаю над одной частью моего приложения, которая будет функционировать как журнал для пользователя, в котором они могут добавить запись, а затем просмотреть или удалить их после этого. Я последовал за несколькими учебниками Swift для CoreData, и я подтвердил, что настройка CoreData работает. Однако у меня возникли проблемы с получением значений для UIViewController
, которые будут отображать журнал после его сохранения. В одной конфигурации я попробовал, чтобы он не отображал никаких данных, в другом данные оставались бы такими же независимо от того, какая запись была выбрана, и в приведенной ниже настройке эта строка journalEntryViewer.journalViewerTextView.text = journalTextToPass
возвращает «найденный номер при разворачивании необязательного значения». Вот код UITableViewController
, который выступает в качестве списка:Передача ключей CoreData в новый ViewController
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
}
}
}
В Swift файл для просмотра (journalEntryViewer
), все, что я сделал, объявляется класс и UITextView. Излишне говорить, что я в недоумении. Любая помощь ценится!
Основные данные - это решение для сохранения объектов, поэтому в В большинстве случаев все, что вам нужно передать, это экземпляры NSManagedObject или даже лучшие экземпляры подкласса NSManagedObject. Создав модель Core Data, Xcode может сгенерировать эти подклассы для вас. – Paulw11