#423: #respond_to? returns true, actual method call raises NoMethodError ---------------------------------+------------------------------------------ Reporter: ecin@… | Owner: martinlagardette@… Type: enhancement | Status: new Priority: minor | Milestone: Component: MacRuby | Keywords: ---------------------------------+------------------------------------------ Changes (by martinlagardette@…): * priority: major => minor * type: defect => enhancement Old description:
framework 'Cocoa'
a = NSMetadataQuery.new
a.respond_to? :setPredicate # => true
a.setPredicate # => NoMethodError: undefined method `setPredicate' for #<NSMetadataQuery:0x2002a1e20>
a.setPredicate "a" # => RuntimeError: NSInvalidArgumentException: -[NSCFString generateMetadataDescription]: unrecognized selector sent to instance 0x2002309c0
New description: {{{ #!ruby framework 'Cocoa' a = NSMetadataQuery.new a.respond_to? :setPredicate # => true a.setPredicate # => NoMethodError: undefined method `setPredicate' for #<NSMetadataQuery:0x2002a1e20> a.setPredicate "a" # => RuntimeError: NSInvalidArgumentException: -[NSCFString generateMetadataDescription]: unrecognized selector sent to instance 0x2002309c0 }}} -- Comment: Hi! Thanks for the report. However, the `undefined method 'setPredicate'` is raised because `setPredicate` (without argument) doesn't exist. On the other hand, the `RuntimeError` is raised because, as the error says, you are sending an invalid argument (`NSInvalidArgumentException`) to `setPredicate:`. `NSString`s are not valid parameters to `setPredicate:`.[[BR]] As you can see, `setPredicate:` is trying to send `generateMetadataDescription` to `NSString`, which is why the error says `unrecognized selector sent to instance`. It is not targeted to the `NSMetadataQuery`, but to the `NSString` you sent as a parameter. Here is a correct way of using `setPredicate:`: {{{ #!ruby framework 'Cocoa' q = NSMetadataQuery.new pre = NSPredicate.predicateWithFormat("grade = '7'", nil) p q.respond_to? :setPredicate # => true p q.setPredicate pre # => #<NSMetadataQuery:0x200230fe0> }}} However, I will try to see if we can change the `undefined method` into something like `missing parameter` or `valid candidates` etc. :-) -- Ticket URL: <http://www.macruby.org/trac/ticket/423#comment:2> MacRuby <http://macruby.org/>