问题描述
我正在尝试从 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)
获取请求现在将获取所有没有包含文本的过敏原属性的实体