Swift:在核心数据模型中搜索字符串
Posted
技术标签:
【中文标题】Swift:在核心数据模型中搜索字符串【英文标题】:Swift: Search for string in core data model 【发布时间】:2016-08-08 15:02:31 【问题描述】:我在 Swift 中遇到了以下问题。
我编写了以下函数来检索我的模型中使用name
“David”的所有人。
private func myFetchRequest()
let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
let myRequest = NSFetchRequest(entityName: "RegisterOfPersons")
myRequest.predicate = NSPredicate(format: "name = %@", "David")
do
let results = try moc.executeFetchRequest(myRequest)
for result in results
print(result)
catch let error
print(error)
即使我的模型包含两个条目,attribute
name = "David",该行
myRequest.predicate = NSPredicate(format: "name = %@", "David")
没有找到这些条目,因为“名称”在我的模型中是一个可选属性。
我是否必须搜索 Optional("David"),意思是 myRequest.predicate = NSPredicate(format: "name = %@", Optional("David"))
?
如何在我的模型中搜索名称为“David”的所有条目?我做错了什么?
感谢您的帮助!
【问题讨论】:
不确定,但将name
作为可选属性是不相关的。 Swift 的可选项与 Core Data 的可选项属性不同。
文字语法 NSPredicate(format: "name = 'David'")
是否有效?
【参考方案1】:
您正在使用string
进行谓词,因此请用这样的单引号将您的比较名称括起来
myRequest.predicate = NSPredicate(format: "name = '%@'", "David")
也可以试试Contains
myRequest.predicate = NSPredicate(format: "name CONTAINS[cd] %@", "David")
【讨论】:
这将与文字字符串 %@ 进行比较。来自谓词编程指南“如果您使用 %@ 使用变量替换(例如 %@ 之类的名字),则会自动为您添加引号。” @pbasdf 我知道,但 op 使用的是=
,这就是建议 op 添加单引号的原因。
非常感谢您的回答!我按照你的建议试过了。但是,它仍然不起作用。也许我在其他地方犯了错误?
您的属性名称是否包含大卫或确切的大卫,如果它包含而不是您需要使用CONTAINS[C]
而不是=
。
检查我编辑的答案,并给出回复是否有效?以上是关于Swift:在核心数据模型中搜索字符串的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3 核心数据 NSInternalInconsistencyException entityForName 无法在此模型中找到名为 Foo 的实体