I am trying to use NSPredicate in Swift to query Core Data but it throws an EXC_BAD_ACCESS(Code=1, address=0x1) error when trying to run it, what am I doing wrong?
Here is the file where the error happens
class LevelsScreenModel : UIViewController { func getWord(level: Int, section: Int) -> String { let fetchRequest = NSFetchRequest(entityName: "Words") //This is the line where the error happens fetchRequest.predicate = NSPredicate(format: "level = %@", level) fetchRequest.predicate = NSPredicate(format: "section = %@", section) let word = AppDelegate().managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as [Words] if(word.count > 1) { for words in word { println(words.word) return words.word } } return "ERROR" } }
The %@
placeholder in predicate format strings is for Objective-C objects, so you have to wrap the integer into an NSNumber
:
fetchRequest.predicate = NSPredicate(format: "level = %@", NSNumber(integer: level))
or use ld
instead to format a (long) integer:
fetchRequest.predicate = NSPredicate(format: "level = %ld", level)
Note also that
fetchRequest.predicate = NSPredicate(format: ...) fetchRequest.predicate = NSPredicate(format: ...)
does not create a compound predicate, the seconds assignment simply overwrites the first. You can use an NSCompoundPredicate
:
let p1 = NSPredicate(format: "level = %ld", level)! let p2 = NSPredicate(format: "section = %ld", section)! fetchRequest.predicate = NSCompoundPredicate.andPredicateWithSubpredicates([p1, p2])
or simply combine the predicates with "AND":
fetchRequest.predicate = NSPredicate(format: "level = %ld AND section = %ld", level, section)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With