0

통해 속성 :는 아래 그림에 도시 된 바와 같이 I 두 <code>Entities</code>이 관계

enter image description here

FoodRestaurant한다.

나는 지금은 조금 떨어져 있지만, 기본적으로 나는 음식 목록을 만들고있다. 사용자는 음식의 이름과 식당 이름을 새 항목에 추가합니다. 나는 개발의 초기 단계에 있습니다.

그래서 AddViewController

및 저장 방법, 내가 가진 : 변수와 ​​

if let appDelegate = (UIApplication.shared.delegate as? AppDelegate) { 
      foodEntry = FoodManagedObject(context: appDelegate.persistentContainer.viewContext) 
      foodEntry.nameOfFood = foodNameTextField.text 
      foodEntry.restaurantName?.nameOfRestaurant = restaurantNameTextField.text 

선언 :

var에 foodEntry을 : FoodManagedObject를!

TimelineView에서 NSFetchedResultsController을 사용하여 FoodManagedObject을 가져 와서 라벨에있는 음식의 이름을 표시 할 수 있습니다. 그러나 레스토랑의 이름은 표시되지 않습니다.

let fetchRequest: NSFetchRequest<FoodManagedObject> = FoodManagedObject.fetchRequest() 
     let sortDescriptor = NSSortDescriptor(key: "nameOfFood", ascending: true) 
     fetchRequest.sortDescriptors = [sortDescriptor] 

     if let appDelegate = (UIApplication.shared.delegate as? AppDelegate) { 
      let context = appDelegate.persistentContainer.viewContext 
      fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil) 
      fetchedResultsController.delegate = self 

      do { 
       try fetchedResultsController.performFetch() 
       if let fetchedObjects = fetchedResultsController.fetchedObjects { 
        foods = fetchedObjects 
       } 
      } catch { 
       print(error) 
      } 
     } 

을하고 cellForRow의 :

그래서, 적절하게 가져 오는거야

cell.foodNameLabel.text = foods[indexPath.row].nameOfFood 

cell.restaurantLabel.text = foods[indexPath.row].restaurantName?.nameOfRestaurant 

내가 오류를 얻을 수 없지만, 레스토랑의 이름은 결코 표시되지 않습니다. 식품 엔티티에 theRestaurant라는

var foods:[FoodManagedObject] = [] 

그래서 나는 속성에 추가 시도하고 그것은 작동하지만 관계를 통해 호출이 작동하는 것 같다 결코 :

식품이다.

내가 여기에 뭔가 분명한 것을 놓치고 있습니까?

+0

혹시'restaurantName' 개체를 만들 수 있습니까? –

답변

0

값이 아닌 객체 간의 관계를 만듭니다. 새로운 음식 객체를 저장할 때 이미 기존의 식당 엔티티 객체를 지정하거나 새 객체를 만들어야한다는 것을 의미합니다. 식당 객체의 초기화없이 객체 값을 할당 할 수는 없습니다.

예. 단지 그들 중 하나에 새로운 음식 개체를 추가보다 이미, 레스토랑의 일부 목록이있는 경우

foodEntry = FoodManagedObject(context: appDelegate.persistentContainer.viewContext) 
foodEntry.nameOfFood = foodNameTextField.text 

// Here you must to load existing Restaurant entity object from database or create the new one   
let restaurant = RestaurantManagedObject(context: appDelegate.persistentContainer.viewContext) 
restaurant.nameOfRestaurant = restaurantNameTextField.text 

foodEntry.restaurantName = restaurant // Object instead of value 

또는

+0

오 와우 .. 감사합니다. @livenplay - 정말 이해할 만하다. 당신의 안내에 따라, 나는 그것을 작동시킬 수 있었다. 저는 실수를 보았습니다 - 레스토랑 엔티티에 대해 실제로 선언하고 지정해야하며 그 부분이 그 부분 이니, 관계에 할당해야합니다. 그것은 지금 매력처럼 작동합니다 - 정말 고마워요! – amitsbajaj