Jamil Jamil - 1 year ago 112
iOS Question

swift CoreData predicates

I'm adding CoreData to my app. Simple fetching is ok, but when i try to fetch data with predicate i get exception in

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
}


My predicate looks like this:
"routeFormed == %@"+route.identifier!
, where
route.identifier
is
String
. Should i add something to
AppDelegate
or to my entities? Also, i opened
.sqlite
file with sqlitebrowser, should i add predicates using visible names or the ones that i see in database
(i.e. "routeFormed" or "ZROUTEFORMED")?

Answer Source

Do not create predicates as strings, that is bound to fail in any but trivial cases. Create the predicate as

let predicate = NSPredicate(format: "routeFormed == %@", route.identifier)

or

let predicate = NSPredicate(format: "%K == %@", "routeFormed", route.identifier)

and pass that to the fetch request. The keys in the predicate are the names of the entity properties as defined in the Core Data model inspector.