2017-02-25 76 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