将 UITextField 中的文本用于 fetchRequest 谓词
Using text in a UITextField for a fetchRequest predicate
我试图通过将 UITextField
中的值传递给一个函数来使用它,该函数将它作为参数并将其用作 NSPredicate
。但是,即使我已经验证我想要的记录在核心数据存储中,我得到的返回结果为零。
该值来自此 UITextField:
@IBOutlet weak var liftName: UITextField!
我正在调用函数来检索记录,如下所示:
let lift = fetchLift(liftName.description)
这是函数:
func fetchLift(liftNameFilter: String? = nil) -> Lift {
let fetchRequest = NSFetchRequest(entityName: "Lift")
if let liftNameFilter = liftNameFilter {
let filterPredicate = NSPredicate(format: "liftName = [c] %@", liftNameFilter)
fetchRequest.predicate = filterPredicate
}
do {
if let results = try coreDataStack.managedObjectContext.executeFetchRequest(fetchRequest) as? [Lift] {
lift = results
}
} catch {
fatalError("There was an error fetching the lifts")
}
return lift![0]
}
我试过类似的东西:
注释掉谓词:
// 让 filterPredicate = NSPredicate(格式: "liftName = [c] %@", liftNameFilter)
// fetchRequest.predicate = filterPredicate
}
并且我返回了该实体中的所有 11 条记录,所以现在我知道它与谓词有关。
我还硬编码了要搜索的值之一:
let filterPredicate = NSPredicate(format: "liftName = [c] %@", "Bench Press")
并检索到我需要的记录。
我做了一些穴居人调试并确定这是传递给函数的内容:
<UITextField: 0x7ffb8340f0e0; frame = (86.5 148; 272.5 30); text = 'Bench Press'; clipsToBounds = YES; opaque = NO; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7ffb81cf03e0>; layer = <CALayer: 0x7ffb8340e320>>
所以我希望 text
值可以直接从那里提取并用作谓词,但事实并非如此。
我觉得这是很明显的事情之一,但我已经对它视而不见了,因为我已经盯着它看了这么久。希望有人能帮助我。谢谢。
您应该使用 UITextField
的 text
属性 来获取输入值,而不是使用 description
.
let lift = fetchLift(liftName.text)
只需将谓词更改为以下内容即可:
let filterPredicate = NSPredicate(format: "ANY liftName CONTAINS[c] %@", liftNameFilter)
我试图通过将 UITextField
中的值传递给一个函数来使用它,该函数将它作为参数并将其用作 NSPredicate
。但是,即使我已经验证我想要的记录在核心数据存储中,我得到的返回结果为零。
该值来自此 UITextField:
@IBOutlet weak var liftName: UITextField!
我正在调用函数来检索记录,如下所示:
let lift = fetchLift(liftName.description)
这是函数:
func fetchLift(liftNameFilter: String? = nil) -> Lift {
let fetchRequest = NSFetchRequest(entityName: "Lift")
if let liftNameFilter = liftNameFilter {
let filterPredicate = NSPredicate(format: "liftName = [c] %@", liftNameFilter)
fetchRequest.predicate = filterPredicate
}
do {
if let results = try coreDataStack.managedObjectContext.executeFetchRequest(fetchRequest) as? [Lift] {
lift = results
}
} catch {
fatalError("There was an error fetching the lifts")
}
return lift![0]
}
我试过类似的东西:
注释掉谓词:
// 让 filterPredicate = NSPredicate(格式: "liftName = [c] %@", liftNameFilter) // fetchRequest.predicate = filterPredicate }
并且我返回了该实体中的所有 11 条记录,所以现在我知道它与谓词有关。
我还硬编码了要搜索的值之一:
let filterPredicate = NSPredicate(format: "liftName = [c] %@", "Bench Press")
并检索到我需要的记录。
我做了一些穴居人调试并确定这是传递给函数的内容:
<UITextField: 0x7ffb8340f0e0; frame = (86.5 148; 272.5 30); text = 'Bench Press'; clipsToBounds = YES; opaque = NO; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7ffb81cf03e0>; layer = <CALayer: 0x7ffb8340e320>>
所以我希望 text
值可以直接从那里提取并用作谓词,但事实并非如此。
我觉得这是很明显的事情之一,但我已经对它视而不见了,因为我已经盯着它看了这么久。希望有人能帮助我。谢谢。
您应该使用 UITextField
的 text
属性 来获取输入值,而不是使用 description
.
let lift = fetchLift(liftName.text)
只需将谓词更改为以下内容即可:
let filterPredicate = NSPredicate(format: "ANY liftName CONTAINS[c] %@", liftNameFilter)