Core data 获取核心数据字符串并放入标签(Swift4)

Core data 获取核心数据字符串并放入标签(Swift4),core-data,label,swift4,fetch,nsfetchrequest,Core Data,Label,Swift4,Fetch,Nsfetchrequest,我试图调用2个不同的核心数据字符串,并将它们分别放在不同的标签上。现在我得到一个错误,即无法使用类型为“([NSManagedObject])”的参数列表调用类型为“init(:)”的初始值设定项。此错误来自j1.text=String(itemsName)。我添加了用于保存和显示的两个视图控制器 import UIKit import CoreData class ViewController: UIViewController { @IBOutlet var j1 : U

我试图调用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")
        }
    }}
导入UIKit
导入CoreData
类ViewController:UIViewController{
@IBOutlet变量j1:UITextField!
@IBOutlet变量j2:UITextField!
@IBAction func save(){
将appD=UIApplication.shared.delegate设为!AppDelegate
让context=appD.persistentContainer.viewContext
让entity=NSEntityDescription.entity(在:context中,名为“Team”)!
让标题=NSManagedObject(实体:实体,插入到:上下文)
标题设置值(j1.text,forKey:“分数”)
title.setValue(j2.text,forKey:“alba”)
做{
尝试context.save()
}
抓住{
印刷品(“汤姆·科利”)
}
}}
类twoVC:UIViewController{
@IBVAR j1:UILabel!
@IBVAR j2:UILabel!
var itemsName:[NSManagedObject]=[]
var itemsName2:[NSManagedObject]=[]
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后,通常从nib执行任何其他设置。
将appD=UIApplication.shared.delegate设为!AppDelegate
让context=appD.persistentContainer.viewContext
let fetchRequest=NSFetchRequest(entityName:“团队”)
fetchRequest.sortDescriptors=[NSSortDescriptor(键:“分数”,升序:true)]
让fetchRequest2=NSFetchRequest(entityName:“团队”)
fetchRequest.sortDescriptors=[NSSortDescriptor(键:“alba”,升序:true)]
做{
itemsName=try context.fetch(fetchRequest)
itemsName2=try context.fetch(fetchRequest2)
如果let score=itemsName[0]。值(forKey:“score”){
j1.text=(分数为!字符串)
}
如果让alba=itemsName2[0]。值(forKey:“alba”){
j2.text=(alba为?字符串)
}
}抓住{
印刷品(“Ashley Tisdale”)
}
}}

试试这个,它对我有用Swift 4我想你需要将值存储为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
}

循环获取的结果,并将其附加到一个字符串中,该字符串随后用作标签的值,这将进入您今天进行获取的
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

我不知道该在结果中输入什么。计数>0。我尝试了itemsName=try context.fetch(fetchRequest)itemsName2=try context.fetch(fetchRequest2)j1.text=String(itemsName)j2.text=String(itemsName2)但是我得到了同样的错误。@SamBurns Here itemsName和itemsName2不是字符串类型,它是NSManagedObject,所以您需要像我在更新的答案中所做的那样转换它。试试看:)出现此错误是因为
itemsName
itemsName2
是数组,并且没有可用的字符串init接受数组作为参数,你能提供你想要的更多细节,帮助我们理解你想要的吗want@NiravD我试图从核心数据调用两个不同的数组,并将它们显示在不同的标签上。核心数据字符串是alba和score。您仍然没有得到,我想说的是,如何在标签中显示数组,而且数组的类型是
NSManagedObject
,您能展示您的团队吗entity@NiravD我用我所有的代码更新了我的问题。这应该可以回答你的问题。现在你正在设置第一个对象的值,但是如果你的数组为空,如果你想显示所有数据,你的应用程序可能会崩溃。你需要的是使用tableView搜索它,你会知道如何实现它。我应该把它放在什么功能中?你问题中的那个,将现有行替换为ITIT开始工作,但仅显示第一个索引。我想显示数组中的所有内容。@SamBurns我故意只读取答案中的第一个值,因为我不知道您到底想要什么。我是否正确理解要将所有提取的值添加到标签?我要将所有值提取到标签。
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