下面给出NSManagedObject
的子类,其中我将托管对象类型设置为NSAttributedString
。
import Foundation
import CoreData
extension NoteData {
@nonobjc public class func fetchRequest() -> NSFetchRequest<NoteData> {
return NSFetchRequest<NoteData>(entityName: "NoteData")
}
@NSManaged public var image: NSData?
@NSManaged public var note: NSAttributedString?
}
A是我的表视图控制器类,我想要获取数据
import UIKit
import CoreData
class TableViewController: UITableViewController
{
var fetchRequest : NSFetchRequest<NSFetchRequestResult>?
var noteData = [NoteData]()
@IBOutlet var table: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
load()
table.reloadData()
}
override func viewWillAppear(_ animated: Bool) {
load()
table.reloadData()
}
func load()
{
let fetchRequest : NSFetchRequest <NoteData> = NoteData.fetchRequest()
do
{
let Data = try
databaseController.getContext().fetch(fetchRequest)
self.table.reloadData()
noteData = Data
}
catch
{
print("Error . \(error)")
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return noteData.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// let cell:UITableViewCell = UITableViewCell()
let cell:UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell")!
let NoteData = noteData[indexPath.row]
NoteData.note?.setValue("hello", forKey: "mykey")
print ("\( cell.textLabel?.attributedText = NoteData.note?.value(forKey: "mykey") as! NSAttributedString)")
return cell
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
if segue.identifier == "showItem"{
let cell = sender as! UITableViewCell
let indexPath = tableView.indexPath(for: cell)
let itemController : mainViewController = segue.destination as! mainViewController
itemController.noteData = noteData[(indexPath?.row)!]
}
if segue.identifier == "showItem"{
let cell = sender as! UITableViewCell
let indexPath = tableView.indexPath(for: cell)
let itemController : mainViewController = segue.destination as! mainViewController
itemController.noteData = noteData[(indexPath?.row)!]
}
}
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
let target = noteData[indexPath.row]
databaseController.persistentContainer.viewContext.delete(target)
databaseController.saveContext()
load()
table.reloadData()
}
}
但是在做完所有事情后我收到错误错误在这里: