使用UITextField中的文本作为fetchRequest谓词

时间:2016-06-29 00:57:23

标签: swift core-data nspredicate nsfetchrequest

我尝试使用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]
  }

我尝试过这样的事情:

  • 评论谓词:

    //让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值可以直接从那里获取并用作谓词但不是。

我觉得这是我现在视而不见的那些显而易见的事情之一,我已经盯着它看了这么久。希望有人可以帮助我。感谢。

1 个答案:

答案 0 :(得分:0)

您应该使用text的{​​{1}}属性来获取输入值,而不是使用UITextField

description

只需将您的谓词更改为以下内容:

let lift = fetchLift(liftName.text)