将 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]
  }

我试过类似的东西:

并且我返回了该实体中的所有 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 值可以直接从那里提取并用作谓词,但事实并非如此。

我觉得这是很明显的事情之一,但我已经对它视而不见了,因为我已经盯着它看了这么久。希望有人能帮助我。谢谢。

您应该使用 UITextFieldtext 属性 来获取输入值,而不是使用 description.

let lift = fetchLift(liftName.text)

只需将谓词更改为以下内容即可:

let filterPredicate = NSPredicate(format: "ANY liftName CONTAINS[c] %@", liftNameFilter)