可转换的Swift 3 NSManagedObject类型NSAttributedString不起作用

时间:2017-08-17 02:40:30

标签: ios swift core-data

下面给出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?
}

I have set it to transformable in database

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()
}
}

但是在做完所有事情后我收到错误错误在这里: I there anyone how can help me any developer

0 个答案:

没有答案