2016-11-06 51 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中的「表格」。我們有實體和關係。但是將核心數據視爲數據庫會讓您隨時遇到很多邏輯問題。

+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