NSPredicate与Transformable属性一起使用

时间:2015-07-07 09:01:11

标签: ios swift core-data nspredicate nsfetchrequest

我有一些字符串数组,我将其保存在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
}

1 个答案:

答案 0 :(得分:-3)

你应该重构你的数据模型以摆脱"字符串数组"。这不是存储此类值的非常合理的方法。

相反,请考虑与捕获这些字符串的新实体的关系。或者,设备一种方案,其中存储字符串并具有分隔记录的唯一字符(例如;或类似的东西)。然后任何简单的字符串谓词都可以工作,如下所示:

NSPredicate(format: "mealtimes contains[cd] %@", "breakfast")