When I filter an array of custom Swift classes using a Predicate I get the error:
*** NSForwarding: warning: object 0x78ed21a0 of class 'Plantivo1_6.Seed' does not implement methodSignatureForSelector: -- trouble ahead
Unrecognized selector -[Plantivo1_6.Seed valueForKey:]
If I remember correctly this would work in Objective-C. What's my mistake?
let names = ["Tom","Mike","Marc"]
println(names)
let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", "om")
let array = (names as NSArray).filteredArrayUsingPredicate(searchPredicate)
println(array)
println()
let mySeed1 = Seed() // Seed is a class with a `culture` String property
let mySeed2 = Seed()
let mySeed3 = Seed()
mySeed1.culture = "Tom"
mySeed2.culture = "Mike"
mySeed3.culture = "Marc"
let mySeeds = [mySeed1,mySeed2,mySeed3]
println(mySeeds)
let searchPredicate1 = NSPredicate(format: "SELF.culture CONTAINS[c] %@", "om")
let array1 = (mySeeds as NSArray).filteredArrayUsingPredicate(searchPredicate1)
println(array1)
Does your Seed class inherit from NSObject?
If not, this is the message you will get.
Solution:
Edit: stklieme is correct - to use NSPredicate, your object's class needs to implement
-valueForKey
as defined by the NSKeyValueCoding protocol. You can either define your own implementation of-valueForKey
, or just make your class inherit from NSObject which takes care of that for you.This is defined in the Apple docs for NSPredicate,