我尝试使用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
值可以直接从那里获取并用作谓词但不是。
我觉得这是我现在视而不见的那些显而易见的事情之一,我已经盯着它看了这么久。希望有人可以帮助我。感谢。
答案 0 :(得分:0)
您应该使用text
的{{1}}属性来获取输入值,而不是使用UITextField
。
description
只需将您的谓词更改为以下内容:
let lift = fetchLift(liftName.text)