diff options
author | thomasvl@gmail.com <thomasvl@gmail.com@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2009-02-03 17:09:43 +0000 |
---|---|---|
committer | thomasvl@gmail.com <thomasvl@gmail.com@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2009-02-03 17:09:43 +0000 |
commit | 74ad2857a75567b273951be9cbe998133fbca26a (patch) | |
tree | 9aedbec980fc19be9f3eecf7acd0dfaa9f7c8067 /Foundation/GTMNSObject+KeyValueObserving.h | |
parent | 2ae297214778005d95354f207753180edca51ec4 (diff) |
- Added GTMNSObject+KeyValueObserving to make it easier on folks to do KVO
"correctly". Based on some excellent code by Michael Ash.
http://www.mikeash.com/?page=pyblog/key-value-observing-done-right.html
This has been added for iPhone and OS X.
- Fixed up GTMSenTestCase on iPhone so that it has a description that matches
that of OCUnit.
Diffstat (limited to 'Foundation/GTMNSObject+KeyValueObserving.h')
-rw-r--r-- | Foundation/GTMNSObject+KeyValueObserving.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/Foundation/GTMNSObject+KeyValueObserving.h b/Foundation/GTMNSObject+KeyValueObserving.h new file mode 100644 index 0000000..de11aeb --- /dev/null +++ b/Foundation/GTMNSObject+KeyValueObserving.h @@ -0,0 +1,70 @@ +// +// GTMNSObject+KeyValueObserving.h +// +// Copyright 2009 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +// +// MAKVONotificationCenter.h +// MAKVONotificationCenter +// +// Created by Michael Ash on 10/15/08. +// + +// This code is based on code by Michael Ash. +// Please see his excellent writeup at +// http://www.mikeash.com/?page=pyblog/key-value-observing-done-right.html +// You may also be interested in this writeup: +// http://www.dribin.org/dave/blog/archives/2008/09/24/proper_kvo_usage/ +// and the discussion on cocoa-dev that is linked to at the end of it. + +#import <Foundation/Foundation.h> + +// If you read the articles above you will see that doing KVO correctly +// is actually pretty tricky, and that Apple's documentation may not be +// completely clear as to how things should be used. Use the methods below +// to make things a little easier instead of the stock addObserver, +// removeObserver methods. +// Selector should have the following signature: +// - (void)observeNotification:(GTMKeyValueChangeNotification *)notification +@interface NSObject (GTMKeyValueObservingAdditions) + +// Use this instead of [NSObject addObserver:forKeyPath:options:context:] +- (void)gtm_addObserver:(id)observer + forKeyPath:(NSString *)keyPath + selector:(SEL)selector + userInfo:(id)userInfo + options:(NSKeyValueObservingOptions)options; +// Use this instead of [NSObject removeObserver:forKeyPath:] +- (void)gtm_removeObserver:(id)observer + forKeyPath:(NSString *)keyPath + selector:(SEL)selector; +@end + +// This is the class that is sent to your notification selector as an +// argument. +@interface GTMKeyValueChangeNotification : NSObject <NSCopying> { + @private + NSString *keyPath_; + id object_; + id userInfo_; + NSDictionary *change_; +} + +- (NSString *)keyPath; +- (id)object; +- (id)userInfo; +- (NSDictionary *)change; +@end |