将 UITextField 中的文本用于 fetchRequest 谓词
Posted
技术标签:
【中文标题】将 UITextField 中的文本用于 fetchRequest 谓词【英文标题】:Using text in a UITextField for a fetchRequest predicate 【发布时间】:2016-06-29 00:57:22 【问题描述】:我正在尝试使用来自UITextField
的值,方法是将其传递给一个函数,该函数将其作为参数并将其用作NSPredicate
。但是,即使我已经验证了我想要的记录在 Core Data 存储中,我也得到了零个结果。
值来自这个 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]
我尝试过类似的方法:
注释掉谓词:
// let filterPredicate = NSPredicate(format: "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
值会被直接从那里取出并用作谓词,但事实并非如此。
我觉得这是我一直盯着它看很久的那些显而易见的事情之一。希望有人可以帮助我。谢谢。
【问题讨论】:
您的预期结果是否与传入的字符串完全匹配? 【参考方案1】:您应该使用UITextField
的text
属性来获取输入的值,而不是使用description
。
let lift = fetchLift(liftName.text)
只需将谓词更改为以下内容:
let filterPredicate = NSPredicate(format: "ANY liftName CONTAINS[c] %@", liftNameFilter)
【讨论】:
叹息。谢谢桑托什。那是我的愚蠢错误。但是为什么要使用format: "ANY liftName CONTAINS[c] %@"
而不是我所拥有的format: "liftName = [c] %@"
?
那是区分大小写的搜索。如果只是 = [c]
对你有用,那么没有问题,使用它:)以上是关于将 UITextField 中的文本用于 fetchRequest 谓词的主要内容,如果未能解决你的问题,请参考以下文章
如何将相关的 UITextField 文本数据发送到可折叠 UITableView 中的函数?
将单元格中的 UITextField 文本保存到 NSUserDefaults 中?