【问题标题】:Swift: Search for string in core data modelSwift:在核心数据模型中搜索字符串
【发布时间】: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'") 是否有效?

标签: ios swift core-data nsfetchrequest


【解决方案1】:

您正在使用string 进行谓词,因此请用这样的单引号将您的比较名称括起来

myRequest.predicate = NSPredicate(format: "name = '%@'", "David")  

也可以试试Contains

myRequest.predicate = NSPredicate(format: "name CONTAINS[cd] %@", "David") 

【讨论】:

  • 这将与文字字符串 %@ 进行比较。来自谓词编程指南“如果您使用 %@ 使用变量替换(例如 %@ 之类的名字),则会自动为您添加引号。”
  • @pbasdf 我知道,但 op 使用的是 =,这就是建议 op 添加单引号的原因。
  • 非常感谢您的回答!我按照你的建议试过了。但是,它仍然不起作用。也许我在其他地方犯了错误?
  • 您的属性名称是否包含大卫或确切的大卫,如果它包含而不是您需要使用CONTAINS[C] 而不是=
  • 检查我编辑的答案,并给出回复是否有效?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 2014-05-06
  • 1970-01-01
  • 2011-08-04
相关资源
最近更新 更多