CoreData测试实体是否为null

时间:2017-02-25 14:30:44

标签: ios swift core-data

我需要在我的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
}

谢谢你的帮助......

奥利弗

1 个答案:

答案 0 :(得分: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&gt; 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
    }
}