我有一些字符串数组,我将其保存在Core Data中作为Transformable。从json我得到了这样的字符串:
if let mealTimes = dictionary["mealTimes"] as? [String]{
self.mealTimes = mealTimes
}
现在我想在mealTime属性中按字符串过滤获取结果。我试过这种方式:
let predicate = NSPredicate(format: "mealTimes LIKE[cd] '*%@*'", "breakfast")
var breakfastContents = StaticContent.fetchStaticContentsWithPredicate(predicate, inManagedObjectContext: self.coreDataStack.context)
if (breakfastContents.count > 0) {
breakfast = breakfastContents.first!
}
问题是结果数组是空的但我知道我在某些内容中有早餐字符串。那么我该如何解决呢?我正在阅读有关将可转换保存为NSData的内容,因此需要一些很棒的技巧。我试图使用LIKE
(有和没有*)命令和CONTAINS
。
StaticContent扩展:
class func fetchStaticContentsWithPredicate(predicate: NSPredicate, inManagedObjectContext managedObjectContext: NSManagedObjectContext) -> [StaticContent] {
// Define fetch request/predicate
var fetchRequest = NSFetchRequest(entityName: "StaticContent")
// Assign fetch request properties
fetchRequest.predicate = predicate
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "id", ascending: true)]
// Handle results
let fetchedResults = managedObjectContext.executeFetchRequest(fetchRequest, error: nil) as! [StaticContent]
return fetchedResults
}
答案 0 :(得分:-3)
你应该重构你的数据模型以摆脱"字符串数组"。这不是存储此类值的非常合理的方法。
相反,请考虑与捕获这些字符串的新实体的关系。或者,设备一种方案,其中存储字符串并具有分隔记录的唯一字符(例如;
或类似的东西)。然后任何简单的字符串谓词都可以工作,如下所示:
NSPredicate(format: "mealtimes contains[cd] %@", "breakfast")