将 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】:

您应该使用UITextFieldtext 属性来获取输入的值,而不是使用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

UITextField 中的文本将无法正确居中

如何将相关的 UITextField 文本数据发送到可折叠 UITableView 中的函数?

将单元格中的 UITextField 文本保存到 NSUserDefaults 中?

按下按钮和文本字段切换后 UITextField 失去焦点(键盘保持可见)

宽度约束动画时UITextfield文本位置没有动画