2016-08-08 39 views
1

我在Swift中遇到了以下問題。Swift:在覈心數據模型中搜索字符串

我寫了下面的函數來檢索我的模型中的所有人與name「大衛」。

private func myFetchRequest() 
{ 
    let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 

    let myRequest = NSFetchRequest(entityName: "RegisterOfPersons") 

    myRequest.predicate = NSPredicate(format: "name = %@", "David") 

    do{ 
     let results = try moc.executeFetchRequest(myRequest) 

     for result in results 
     { 
      print(result) 
     } 

    } catch let error{ 
     print(error) 
    } 
} 

即使我的模式包含兩個條目與attribute NAME =「大衛」,行

myRequest.predicate = NSPredicate(format: "name = %@", "David") 

未找到這些條目,因爲「名」是在我的模型可選屬性。 我是否需要搜索Optional(「David」),意思是類似於myRequest.predicate = NSPredicate(format: "name = %@", Optional("David"))

如何在我的模型中搜索名爲「David」的所有條目?我究竟做錯了什麼?

感謝您的幫助!

+0

不知道嘗試,但有'name'是一個可選的屬性不有關。 Swift optionals與Core Data可選屬性不同。 –

+0

字面語法'NSPredicate(format:「name ='David'」)'是否工作? – vadian

回答

4

您與string斷言所以用單引號括起來的名字比較像這樣

myRequest.predicate = NSPredicate(format: "name = '%@'", "David") 

還與Contains

myRequest.predicate = NSPredicate(format: "name CONTAINS[cd] %@", "David") 
+0

這將與字符串%@進行比較。從謂詞編程指南「如果您使用%@使用變量替換(例如firstName,如%@),則會自動爲您添加引號」。 – pbasdf

+0

@pbasdf我知道,但是op正在使用'=',這是提示添加單引號的原因。 –

+0

非常感謝您的回答! 我嘗試了你的建議。但是,它仍然不起作用。也許我在其他地方犯了一個錯誤? – Pisan