2016-11-06 2 views
0

브랜드에 속한 모든 모델을 가져 오려고합니다. 그러나 외래 키를 가져 오려고 할 때 내부 키가있는 일종의 주소 구조가있는 NSSET 형식이 나타납니다. 여기에 내 코드가 있습니다.신속한 관련 테이블 가져 오기

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. 핵심 데이터의 "테이블"이 아닙니다. 엔티티와 관계가 있습니다. 그러나 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