我确实设法通过创建一个带有将属性检查为字符串的循环的函数来完成此操作。但我正在寻找一种更好的方法来做到这一点。
在sql中我这样做:
选择* WHERE"属性" ==" string"
有没有办法在swift中执行此操作?
我的功能如下:
func tableData()
{
let objects = retrieveValues("JobTime") //Retrieve a NSMutableArray
if !objects.isEmpty
{
for var index = 0; index < objects.count; ++index
{
if objects[index].valueForKey("jobTitle") as? String == transferTitle
{
print("Job title matched: \(index)")
}
else
{
print("Nothing here!")
}
}
}
}
答案 0 :(得分:9)
要在CoreData中执行获取请求,您必须初始化NSFetchRequest
类。为了指定您感兴趣的实体类型,您需要创建NSPredicate
类。它使您能够指定非常高级的查询。在大多数情况下,创建NSPredicate的最简单方法是使用格式字符串 - 可以找到有关语法的详细信息Apple's Predicate Format String Syntax document。
您可以在下面的CoreData(和Swift)中找到如何执行获取请求的示例。
let managedObjectContext: NSManagedObjectContext
let predicate = NSPredicate(format: "jobTitle == %@", "Programmer")
let fetchRequest = NSFetchRequest.init(entityName: "People")
fetchRequest.predicate = predicate
//fetchRequest.sortDescriptors = [] //optionally you can specify the order in which entities should ordered after fetch finishes
let results = managedObjectContext.executeFetchRequest(fetchRequest)
答案 1 :(得分:1)
您可以将查询传递给CoreData,只检索您想要的内容。 NSManagedObjectContext
类有一个executeFetchRequest
方法,您可以调用该方法从数据库中检索数据。您将NSFetchRequest
对象传递给它。该对象包含NSPredicate
,用于定义您的查询。