在 Swift 中使用 NSPredicate 时的 EXC_BAD_ACCESS

问题描述

我正在尝试从 Core Data 中获取我的所有过敏原属性中没有“X”的项目。

<!DOCTYPE html>
<html>
    <head>
        <Meta charset="UTF-8"/>
        <title>Livestream</title>
    </head>
    <body style="margin:0">
        <video id="myVidplayer" style="width:100%;height:100%" muted autoplay></video>
        <button onclick="snapshot()" >Snapshot</button>
        <div class="mycanvas">
            <h2>Captured snapshot</h2>
            <p>Right click and save the image</p>
            <canvas></canvas>
        </div>
    </body>
</html>

出于某种原因,这会因“EXC_BAD_ACCESS”而崩溃

但是当我尝试使用谓词获取时它工作得很好:

func doesNotContain(attribute: String = "allergens",text: String) {
    let request: NSFetchRequest<Dinner> = Dinner.fetchRequest()
    let predicate = nspredicate(format:"NOT \(attribute) CONTAINS %@",text)
    request.predicate = predicate
    do { items = try context.fetch(request) }
    catch let error { print("Error: \(error)") }
}

这里的属性调用函数时设置为“name”,在第一个例子中设置为“allergens”

我已经确定属性“allergens”不为零,并且我还尝试使用 %d 而不是 %@。 allergens 属性一个数组,这就是为什么我使用 NOT CONTAINS

解决方法

事实证明,NSPredicate 不适用于带有 [String] 自定义类的标记为“可转换”的属性。

我不是用数组而是用字符串来让它工作,用“;”分隔每个单独的过敏原以便以后可以分成子串。

过敏原示例:

dinner.allergens = "Gluten;Dairy"

NSPredicate:

let predicate = NSPredicate(format:"NOT (%K CONTAINS[cd] %@)",attribute,text)

获取请求现在将获取所有没有包含文本的过敏原属性的实体