Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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")?

like image 694
Jamil Avatar asked Apr 26 '26 20:04

Jamil


1 Answers

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.

like image 159
Martin R Avatar answered Apr 28 '26 10:04

Martin R



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!