2017-02-25 73 views
0

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

你抓不到不会抛出错误的东西。您需要改进工作流程。

返回数组和检查空数组后拨:

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) as! [Vendeurs] 

    } 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) as! [Vendeurs] 
} 

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) as! [Vendeurs] 
     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 
    } 
} 
+0

谢谢....这是很清楚! – Olivier