【问题标题】:CoreData test if entity is nullCoreData 测试实体是否为空
【发布时间】:2017-02-25 14:30:43
【问题描述】:

我需要在我的 CoreData 数据库中找到一条记录,所以我做了这个函数。我的问题是,如果我没有找到任何记录,我想返回空值或任何我能捕捉到的东西......我该怎么做?

目前,当函数没有找到时,返回的是一个空对象(Vendeurs),但是当我测试这个空实体的属性时我的应用程序崩溃了

func recherche(code: String) -> Vendeurs {

   let v:Vendeurs = Vendeurs()

   let context=getContext(backGround: false)
   let fetchRequest:NSFetchRequest<Vendeurs> = Vendeurs.fetchRequest()
   let predicate:NSPredicate = NSPredicate(format: "code == %@", code)
   fetchRequest.predicate = predicate

   do {
      let result = try context.fetch(fetchRequest)
      if result.count > 0 {
         return result[0]
      }
   } catch {

   }
   return v
}

我的电话:

let v=Vendeur()
let ve=v.recherche(code: codeSecret)
if (Int(ve.id) > 0) && (Int(ve.id) != idVendeur) {
   // blah blah
}

感谢您的帮助...

奥利维尔

【问题讨论】:

    标签: ios swift core-data


    【解决方案1】:

    您无法捕获不会引发错误的内容。您需要改进工作流程。

    在调用之后返回数组并检查空数组:

    func recherche(code: String) -> [Vendeurs] {
    
       let context=getContext(backGround: false)
       let fetchRequest:NSFetchRequest<Vendeurs> = Vendeurs.fetchRequest()
       let predicate:NSPredicate = NSPredicate(format: "code == %@", code)
       fetchRequest.predicate = predicate
    
       do {
          return try context.fetch(fetchRequest)
    
       } catch {
         print(error)
         return [Vendeurs]()
       }
    }
    

    let vendeurs = v.recherche(code: codeSecret)
    if !vendeurs.isEmpty, let vid = Int(vendeurs[0].id) {
        if vid > 0 && vid != idVendeur {
          // blah blah
        }
    }
    

    或者使recherche方法can throw

    func recherche(code: String) -> [Vendeurs] throws {
    
       let context=getContext(backGround: false)
       let fetchRequest:NSFetchRequest<Vendeurs> = Vendeurs.fetchRequest()
       let predicate:NSPredicate = NSPredicate(format: "code == %@", code)
       fetchRequest.predicate = predicate
       return try context.fetch(fetchRequest)
    }
    

    do { 
       let vendeurs = try v.recherche(code: codeSecret)
       if !vendeurs.isEmpty, let vid = Int(vendeurs[0].id) {
           if vid > 0 && vid != idVendeur {
             // blah blah
           }
       }
    } catch {
      print(error)
    }
    

    或者——第三个选项——如果recherche应该只检查并返回一个id > 0

    func recherche(code: String) -> Int {
    
        let context=getContext(backGround: false)
        let fetchRequest:NSFetchRequest<Vendeurs> = Vendeurs.fetchRequest()
        let predicate:NSPredicate = NSPredicate(format: "code == %@", code)
        fetchRequest.predicate = predicate
        do {
            let result = try context.fetch(fetchRequest)
            guard !result.isEmpty, let id = Int(result[0].id) else { return 0 }
            return id
        } catch {
            print(error)
            return 0
        }
    }
    

    let vid = v.recherche(code: codeSecret)
        if vid > 0 && vid != idVendeur {
          // blah blah
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 2018-08-10
      • 2011-09-17
      相关资源
      最近更新 更多