我需要在我的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
}
谢谢你的帮助......
奥利弗
答案 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
}
}