2016-10-02 2 views
0

Мне очень сложно выяснить, как извлекать значения отношений между объектами. У меня есть подразделение продуктов питания и объект питания. Для демонстрационных целей я просто перечислял 1 атрибут для каждого. Название для еды и белка для еды. Мои отношения - это еда и еда с обратными отношениями, многие для многих. То, что я хочу, чтобы сделать, - принести Meal и вернуть значение белка, связанное с этой едой. В конечном итоге я буду получать питание по дате, а затем вытаскивать информацию о питании из этой еды. Решение, которое я нашел, возвращает больше, чем просто значение, как вы можете видеть по изображению ярлыка симулятора. Пожалуйста, любая помощь будет очень признательна! У меня есть ощущение, что есть более простой способ сделать то, что я пытаюсь сделать, но я искал часы и не могу понять это.Fetch Запрос возврата {(// value)} вместо значения

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

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


} 

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

Смежные вопросы