【问题标题】:fetch related tables in swift 3在 swift 3 中获取相关表
【发布时间】:2016-11-06 19:48:43
【问题描述】:

我正在尝试获取属于某个品牌的所有模型,但是当我尝试获取外键时,我得到的 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
    }
}

您能帮我了解如何获取相关表吗?

【问题讨论】:

    标签: core-data swift3 fetch


    【解决方案1】:

    您的fetchModel 每次调用它时都会插入一个Car_Brand 的新实例。新插入的实例上不太可能存在任何现有模型。

    附:它们不是 Core Data 中的“表格”。我们有实体和关系。但是将 Core Data 视为数据库会让您在未来遇到很多逻辑问题。

    【讨论】:

    • 谢谢,只有在不存在时才插入,我试图将谓词修改为这样的东西,request.predicate = NSPredicate(format: "Car_Brand.id_model = %@",brandDescription) 但是也不起作用,你知道我在哪里可以找到一些好的例子来过滤这种方式
    【解决方案2】:

    解决方案:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多