2016-11-06 5 views
0

Я пытаюсь получить все модели, принадлежащие бренду, но когда я пытаюсь получить внешний ключ, я получаю тип NSSET с какой-то структурой адресов, в которой есть внешний ключ внутри из этого, и я застрял с этим, вот мой код:Получение связанных таблиц в swift 3

class func insertNew (brandDescription: String, inManagedObjectContext context: NSManagedObjectContext) -> Car_Brand? { 
     let request: NSFetchRequest<Car_Brand> = Car_Brand.fetchRequest() 
     request.predicate = NSPredicate (format: "brand = %@", brandDescription) 
     if let brand = (try? context.fetch(request))?.first { 
      return brand 
     } else if let brand = NSEntityDescription.insertNewObject(forEntityName: "Car_Brand", into: context) as? Car_Brand { 
      brand.brand = brandDescription 
      return brand 
     } 
     return nil 
    } 
class func fetchModel (brandDescription: String, inManagedObjectContext context: NSManagedObjectContext) -> [String]? { 
    let Brand = Car_Brand.insertNew(brandDescription: brandDescription, inManagedObjectContext: context) 
    let request: NSFetchRequest<Model> = Model.fetchRequest() 
    request.predicate = NSPredicate(format: "id_model = %ld", (Brand?.id_model)!) 
    request.propertiesToFetch = ["model"] 
    request.sortDescriptors = [NSSortDescriptor(key: "model", ascending: true)] 
    if let preModelList = try? context.fetch(request) as [Model] { 
     var modelList: [String] = [] 
     for preModelList in preModelList { 
      modelList.append(preModelList.model!) 
     } 
     return modelList 
    } else { 
     return nil 
    } 
} 

вы можете мне помочь, пожалуйста, чтобы понять, как извлечь связанные таблицы?

ответ

0

Ваш fetchModel вставляет новый экземпляр Car_Brand каждый раз, когда вы его вызываете. Маловероятно, что в этом недавно вставленном экземпляре есть какие-либо существующие модели.

P.S. Они не являются «таблицами» в Core Data. У нас есть сущности и отношения. Но, думая о Core Data как базе данных, вы ставите перед собой множество логических проблем в будущем.

+0

благодарственных лет, только вставить, если не существует, я пытался изменить предикат что-то вроде этого, request.predicate = NSPredicate (формата: «Car_Brand.id_model =% @», brandDescription), но также не работает, знаете ли вы, где я могу найти хорошие примеры для фильтрации этого пути –

0

Решение:

class func fetchModel (brandDescription: String, inManagedObjectContext context: NSManagedObjectContext) -> [String]? { 
     let request: NSFetchRequest<Model> = Model.fetchRequest() 
     request.predicate = NSPredicate(format: "id_model.brand = %@",brandDescription) 
     request.propertiesToFetch = ["model"] 
     request.sortDescriptors = [NSSortDescriptor(key: "model", ascending: true)] 
     if let preModelList = try? context.fetch(request) as [Model] { 
      var modelList: [String] = [] 
      for preModelList in preModelList { 
       modelList.append(preModelList.model!) 
      } 
      return modelList 
     } else { 
      return nil 
     } 
    } 

ссылка: https://developer.apple.com/library/prerelease/content/documentation/Cocoa/Conceptual/Predicates/Articles/pUsing.html

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

  • Нет связанных вопросов^_^