CoreData 测试实体是不是为空
Posted
技术标签:
【中文标题】CoreData 测试实体是不是为空【英文标题】: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
感谢您的帮助...
奥利维尔
【问题讨论】:
【参考方案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
【讨论】:
以上是关于CoreData 测试实体是不是为空的主要内容,如果未能解决你的问题,请参考以下文章
与此上下文的 CoreData SwiftUI 错误不同的 NSManagedObjectModel