swift CoreData 谓词
Posted
技术标签:
【中文标题】swift CoreData 谓词【英文标题】:swift CoreData predicates 【发布时间】:2016-08-10 12:31:13 【问题描述】:我正在将 CoreData 添加到我的应用程序中。简单的获取是可以的,但是当我尝试使用谓词获取数据时,我在AppDelegate
中遇到异常。
func fetchWithPredicate(table: String, pred: String)->NSArray
var appDel : AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate);
var context : NSManagedObjectContext = appDel.managedObjectContext
var request = NSFetchRequest(entityName: table)
request.predicate = NSPredicate(format: pred)//exception occurs on this string
request.returnsObjectsAsFaults = false
var results: NSArray = NSArray()
do
results = try context.executeFetchRequest(request)
catch
return results
我的谓词如下所示:"routeFormed == %@"+route.identifier!
,其中route.identifier
是String
。我应该向AppDelegate
或我的实体添加一些东西吗?另外,我用 sqlitebrowser 打开了.sqlite
文件,我应该使用可见名称添加谓词还是在数据库中看到的谓词(i.e. "routeFormed" or "ZROUTEFORMED")?
【问题讨论】:
【参考方案1】:不要不将谓词创建为字符串,这必然会失败,但 琐碎的案例。创建谓词为
let predicate = NSPredicate(format: "routeFormed == %@", route.identifier)
或
let predicate = NSPredicate(format: "%K == %@", "routeFormed", route.identifier)
并将其传递给获取请求。谓词中的键是 Core Data 模型中定义的实体属性的名称 检查员。
【讨论】:
以上是关于swift CoreData 谓词的主要内容,如果未能解决你的问题,请参考以下文章
Swift coreData - 格式化日期并在谓词中使用它
Swift CoreData:访问关系比仅通过谓词获取要慢 - 是这样设计的吗?