On Jan 11, 2009, at 05:25, Russell Martin wrote:

Here's the source of changeKeyPath:
- (void)changeKeyPath:(NSString *)keyPath
            ofObject:(id)obj
             toValue:(id)newValue
{
        // setValue:forKeyPath: will cause the key-value observing method
        // to be called, which takes care of the undo stuff
        [obj setValue:newValue forKeyPath:keyPath];
}

OK, so you've found the definition of the method. You certainly can't tell from this definition alone whether it's overriding something else, but you've eliminated the possibility of its overriding something else in your (or Hillegass's) code by searching for it, and you've eliminated the possibility of its overriding something in the Cocoa frameworks (or something similar, like being a delegate method) by checking the documentation. So it's just a method.

I tried this. 'Jump to definition' stays right where I started, at the one and only implementation of changeKeyPath in my MyDocument.m file. Also, searching for changeKeyPath in all of my project file shows only the one instance in MyDocument.m. This is why I was thinking that I was overriding a super's method or implementing a delegate method.


...

Nope. Not getting a compile error. I even cleaned all targets and rebuilt just to make sure. The program builds and runs and does what Hillegass says it will do. He's got an email address listed in the book for feedback, I guess I should give him some because to a complete beginner (which is what this book is for), it's a complete mystery as to why:

a) I don't have to provide any earlier declaration of changeKeyPath

This is true, under certain conditions. If nothing in the .m file containing the definition refers to it *before* the definition, and nothing in any other .m file refers to it at all, then there's no need to have a separate declaration ("stub"). [This is a useful technique for methods that are private to the .m file, BTW, since it runs no risk of exposing the method to the outside world.] As I noted before, that's true of *any* definition in C, whether it's a variable or a function (or a method in Objective-C). If you need to use the method elsewhere, just add a declaration in the @interface of the .h file corresponding to the .m file.

b) no other method calls it in the program

Could be. Since this a method you (or Hillegass) wrote, it won't be called unless you write code to call it.

c) I just added a an NSLog call to it, built, put the program through its paces and it never seems to get called.

See (b).

d) I just commented it out and it doesn't seem to affect the program's functionality at all

See (b).

e) I might have just been wasting everyone's time, and if so, please let me apologize for that.

Not a problem, and I don't think you were so terribly tangled up after all. If you can work out where you're supposed to call this method (and you'll have to refer to Hillegass's book for that -- maybe he doesn't have you use it until a later section), you'll work out whether you're going to need the declaration in the .h file, or whether you can take the shortcut of omitting the .h file declaration.



_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to