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 中 JSON 的模型类和核心数据的相同类

Swift 3 核心数据 NSInternalInconsistencyException entityForName 无法在此模型中找到名为 Foo 的实体

在核心数据swift ios中使用未解析的标识符“模型”

Swift 2:将 JSON 原生序列化为核心数据模型对象

如何使用 swift 3 在核心数据中搜索字符串?

swift2核心数据和处理关系