2016-10-02 5 views
0

Es fällt mir sehr schwer herauszufinden, wie Beziehungswerte zwischen Entitäten extrahiert werden. Ich habe eine Food-Entität und eine Meal-Entität. Zu Demonstrationszwecken habe ich einfach jeweils 1 Attribut aufgelistet. Ein Titel für Essen und Protein für Essen. Meine Beziehungen sind Essen und Essen mit umgekehrter Beziehung, viele zu viele. Ich möchte in der Lage sein, eine Mahlzeit zu holen und den Proteinwert zurückzugeben, der mit dieser Mahlzeit verbunden ist. Ich werde schließlich Mahlzeiten nach Datum holen und dann Ernährungsinformationen aus dieser Mahlzeit ziehen. Die Lösung, die ich gefunden habe, gibt mehr als nur den Wert zurück, wie Sie auf dem Bild des Simulatorlabels sehen können. Bitte jede Hilfe wäre sehr willkommen! Ich habe das Gefühl, dass es einen einfacheren Weg gibt, das zu tun, was ich versuche, aber ich habe stundenlang gesucht und kann es nicht herausfinden.Fetch Request liefert {(// Wert)} statt nur

Ich habe versucht, Bilder zu posten, aber es wird mich nicht lassen, also werde ich meinen Code posten und was passiert.

ViewController.swift

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

My Label dies anzeigt ...

{()}

Ich muss einfach die '20' herausziehen. Versuchen Sie, den Wert label.text auf str as zu setzen! String funktioniert auch nicht. Irgendeine Führung ?? Vielen Dank

Antwort

0

Wird Folgendes tun?

self.label.text = strs 
+0

Nein, es funktioniert nicht – lilbill412

+0

Können Sie die Art der "Punkt" überprüfen, wenn Tracing? Was ist es? –

+0

Auf welche Variable beziehen Sie sich? – lilbill412

0

ich es herausgefunden .....

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. 
} 


} 

Danke für die Hilfe

Verwandte Themen