2016-10-02 97 views
0

我有一個非常困難的時間搞清楚如何提取實體之間的關係值。我有一個Food實體和一個Meal實體。爲了演示目的,我只列出了每個屬性的1個屬性。用於餐食的標題和用於食物的蛋白質。我的人際關係是餐飲和食物之間的關係,多對多。我想要做的是獲取一份膳食並返回與該膳食相關的蛋白質值。我將最終通過日期提取膳食,然後從該膳食中提取營養信息。我發現的解決方案不僅返回了模擬器標籤圖片所示的值。請任何幫助將非常感激!我有一種感覺,有一種更簡單的方法來做我想做的事情,但我一直在尋找幾個小時,但無法弄清楚。取回請求返回{(//值)}而不僅僅是值

我嘗試發佈圖片,但它不會讓我這樣我會發布我的代碼,發生了什麼。

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

我的標籤顯示這...

{()}

我需要簡單地拉 '20' 出來。嘗試將label.text值設置爲str!字符串也不會工作。任何指導?非常感謝你

回答

0

下面會做什麼?

self.label.text = strs 
+0

不,這是行不通的跟蹤時 – lilbill412

+0

您能查看「項目」的類型?它是什麼? –

+0

你指的是什麼變量? – lilbill412

0

我想通了.....

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


} 

感謝您的幫助

相關問題