获取核心数据字符串并放置在标签中(Swift4)

fetch core data string and place in a label (Swift4)

我正在尝试调用 2 个不同的核心数据字符串并将它们分别放在不同的标签上。现在我收到错误无法使用类型为“([NSManagedObject])”的参数列表调用类型 'init(_:)' 的初始值设定项。此错误来自 j1.text = String(itemsName)。我添加了两个视图控制器用于保存和显示。

        import UIKit
import CoreData

class ViewController: UIViewController {

@IBOutlet var j1 : UITextField!
@IBOutlet var j2 : UITextField!


@IBAction func save(){

    let appD = UIApplication.shared.delegate as! AppDelegate

    let context = appD.persistentContainer.viewContext
    let entity = NSEntityDescription.entity(forEntityName: "Team", in : context)!

    let theTitle = NSManagedObject(entity: entity, insertInto: context)
    theTitle.setValue(j1.text, forKey: "score")
    theTitle.setValue(j2.text, forKey: "alba")


    do {
        try context.save()
    }
    catch {
        print("Tom Corley")

    }
}}
class twoVC: UIViewController {

    @IBOutlet var j1 : UILabel!
    @IBOutlet var j2 : UILabel!

        var itemsName : [NSManagedObject] = []
      var itemsName2 : [NSManagedObject] = []
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let appD = UIApplication.shared.delegate as! AppDelegate

        let context = appD.persistentContainer.viewContext

        let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Team")
        fetchRequest.sortDescriptors = [NSSortDescriptor(key: "score", ascending: true)]


        let fetchRequest2 = NSFetchRequest<NSManagedObject>(entityName: "Team")
        fetchRequest.sortDescriptors = [NSSortDescriptor(key: "alba", ascending: true)]





        do {
            itemsName = try context.fetch(fetchRequest)
            itemsName2 = try context.fetch(fetchRequest2)
            if let score = itemsName[0].value(forKey: "score") {
                j1.text = (score as! String)
            }
            if let alba = itemsName2[0].value(forKey: "alba") {
                j2.text = (alba as? String)
            }


        }catch {
            print("Ashley Tisdale")
        }
    }}

试试这个对我有用 Swift 4 我认为您需要将值存储为用作 sortDescriptor 的 int。

func FetchManagedObjectFromDatabaseForStoreData(Entity :NSEntityDescription) -> 
[NSManagedObject]
{
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>()

    // Add Sort Descriptor
    let sortDescriptor = NSSortDescriptor(key: "order", ascending: true)
    let sortDescriptor1 = NSSortDescriptor(key: "is_favourite", ascending: false)

    fetchRequest.sortDescriptors = [sortDescriptor,sortDescriptor1]

    // Create Entity Description
    fetchRequest.entity = Entity

    let result : [NSManagedObject] = []

    // Execute Fetch Request
    do{
        let result = try appDelegate.managedObjectContext.fetch(fetchRequest) as! [NSManagedObject]

    if  result.count > 0
    {
        return result

    }
    else
    {
        // return result

    }
}
catch{
    let fetchError = error as NSError
    print(fetchError)
}

return result
}

获取数据

// Create Entity Description
let entityDescription = NSEntityDescription.entity(forEntityName: "Your Entity Name Here", in: appDel.managedObjectContext)

let DataObject = FetchManagedObjectFromDatabaseForStoreData(Entity: entityDescription!)

//Convert  Array of NSManagedObject into array of [String:AnyObject]     
for item in DataObject{

    let keys = Array(item.entity.attributesByName.keys)

    // Here is your result
    print((item.dictionaryWithValues(forKeys: keys) as NSDictionary).value(forKey: "id") as Any) // And so On Whatewer you Fetch

}

遍历提取的结果并附加到一个字符串,然后用作标签的值,它位于您今天进行提取的 do{...} 中。请注意,我在这里只使用了一个获取请求。

itemsName = try context.fetch(fetchRequest)
var mergedScore: String = ""
var mergedAlba: String = ""
for item in itemsName {
    if let score = item.value(forKey: "score") as? String {
         mergedScore.append(score)
         mergedScore.append(" ") //separator
    }
    if let alba = item.value(forKey: "alba") as? String {
         mergedScore.append(alba)
         mergedScore.append(" ") //separator
    }
}
j1.text = mergedScore
j2.text = mergedAlba