Fetch Request, возвращающий {(//value )} вместо just value

Мне очень трудно понять, как извлечь значения отношений между сущностями. У меня есть пищевая сущность и пищевая сущность. Для демонстрационных целей я просто перечислил 1 атрибут для каждого. Название для еды и белка для еды. Мои отношения-это еда и еда с обратным отношением, много ко многим. То, что я хочу быть в состоянии сделать, это принести еду и вернуть ценность белка, связанную с этой едой. Я буду получать питание по дате в конечном итоге, а затем получать информацию о питании из этой еды. Решение, которое я нашел, возвращает больше, чем просто значение, как вы можете видеть на картинке метки симулятора. Пожалуйста любая помощь была бы очень признательна! У меня есть чувство, что есть более простой способ сделать то, что я пытаюсь сделать, но я искал в течение нескольких часов и не могу понять это.

Я пытался размещать изображения, но это не позволит мне, поэтому я буду публиковать свой код и то, что происходит.

ViewController.быстрый

import UIKit
import CoreData

class ViewController: UIViewController {
    @IBOutlet weak var label: UILabel!
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.


    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let context = appDelegate.persistentContainer.viewContext

    //================================
    //CREATE MEAL AND FOOD
    //================================
    let newMeal = NSEntityDescription.insertNewObject(forEntityName: "Meal", into: context) as! Meal
    newMeal.title = "Meal 1"

    let newFood = NSEntityDescription.insertNewObject(forEntityName: "Food", into: context) as! Food
    newFood.protein = "20"
    newFood.setValue(newMeal, forKey: "meal")

    //================================
    //FETCH REQUEST
    //================================
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Meal")
    let sortDescriptor = NSSortDescriptor(key: "title", ascending: true)
    request.sortDescriptors = [sortDescriptor]
    request.returnsObjectsAsFaults = false
    do {
        //===============================
        //EXTRACT RELATIONSHIP DATA
        //==============================
        let results = try context.fetch(request) as NSArray
        for res in results {
            let data = res as! Meal
            let item = data.food
            let strs = item.value(forKey: "protein")
            self.label.text = "(strs)"
        }
    } catch {
        print ("error")
    }   
}

Моя метка показывает это…

{(
20
)}

Мне нужно просто вытащить «20». Попытка установить метку.текстовое значение для str as! строка не будет работать либо. Есть указания?? Огромное спасибо

2 ответа

  1. Я понял это…..

    import UIKit
    import CoreData
    
    class ViewController: UIViewController {
    
    var item:NSSet = []
    var strs:NSSet = []
    
    @IBOutlet weak var label: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    
    
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let context = appDelegate.persistentContainer.viewContext
    
        //================================
        //CREATE MEAL AND FOOD
        //================================
        let newMeal = NSEntityDescription.insertNewObject(forEntityName: "Meal", into: context) as! Meal
        newMeal.title = "Meal 1"
    
        let newFood = NSEntityDescription.insertNewObject(forEntityName: "Food", into: context) as! Food
        newFood.protein = "20"
        newFood.setValue(newMeal, forKey: "meal")
    
        //================================
        //FETCH REQUEST
        //================================
        let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Meal")
        let sortDescriptor = NSSortDescriptor(key: "title", ascending: true)
        request.sortDescriptors = [sortDescriptor]
        request.returnsObjectsAsFaults = false
        do {
            //===============================
            //EXTRACT RELATIONSHIP DATA
            //==============================
            let results = try context.fetch(request) as! [Meal]
            for res in results {
    
                item = res.food
    
                strs = item.value(forKey: "protein") as! NSSet
                let array = strs.allObjects
                print(array[0])
    
                self.label.text = String(format: "%@", array[0] as! CVarArg)
            }
        } catch {
            print ("error")
        }   
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    
    }
    

    Спасибо за помощь