Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #import <Foundation/Foundation.h>
- @interface Character : NSObject
- @property (nonatomic, strong) NSString *characterName;
- @property (nonatomic, strong) NSNumber *ownedClowCards;
- - (void)hasLostClowCard;
- - (void)hasGainedClowCard;
- @end
- @implementation Character
- @synthesize ownedClowCards = _ownedClowCards;
- - (NSNumber *)ownedClowCards
- {
- NSLog(@"Priv getter");
- return _ownedClowCards;
- }
- - (void)setOwnedClowCards:(NSNumber *)newValue
- {
- NSLog(@"Priv setter");
- _ownedClowCards = newValue;
- }
- - (void)hasLostClowCard
- {
- NSLog(@"%@ has lost a card! Cards now: %@", self.characterName, self.ownedClowCards);
- }
- - (void)hasGainedClowCard
- {
- NSLog(@"%@ has earned a card! Cards now: %@", self.characterName, self.ownedClowCards);
- }
- - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
- {
- NSLog(@"Observer stuff working");
- if ([keyPath isEqualToString:@"ownedClowCards"]) {
- if (change[NSKeyValueChangeNewKey] < change [NSKeyValueChangeOldKey]) {
- [self hasLostClowCard];
- } else {
- [self hasGainedClowCard];
- }
- }
- }
- @end
- int main()
- {
- @autoreleasepool {
- Character *sakura;
- Character *shaoran;
- //Create and give the properties some values with KVC...
- sakura = [[Character alloc] init];
- sakura.characterName = @"Sakura Kinomoto";
- sakura.ownedClowCards = @20;
- shaoran = [[Character alloc] init];
- shaoran.characterName = @"Li Shaoran";
- shaoran.ownedClowCards = @21;
- NSLog(@"%@ has %@ Clow Cards", sakura.characterName, sakura.ownedClowCards);
- NSLog(@"%@ has %@ Clow Cards", shaoran.characterName, shaoran.ownedClowCards);
- [sakura addObserver:sakura
- forKeyPath:@"ownedClowCards"
- options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
- context:nil];
- NSLog(@"------------ setter ----------");
- sakura.ownedClowCards = @22;
- NSLog(@"------------ setValue ----------");
- [sakura setValue:[NSNumber numberWithInt:25] forKey:@"ownedClowCards"];
- [sakura removeObserver:sakura forKeyPath:@"ownedClowCards"];
- }
- return 0;
- }
- $ clang -framework Foundation main.m && ./a.out
- 2013-11-28 14:54:08.387 a.out[76538:507] Priv setter
- 2013-11-28 14:54:08.389 a.out[76538:507] Priv setter
- 2013-11-28 14:54:08.390 a.out[76538:507] Priv getter
- 2013-11-28 14:54:08.390 a.out[76538:507] Sakura Kinomoto has 20 Clow Cards
- 2013-11-28 14:54:08.391 a.out[76538:507] Priv getter
- 2013-11-28 14:54:08.391 a.out[76538:507] Li Shaoran has 21 Clow Cards
- 2013-11-28 14:54:08.392 a.out[76538:507] ------------ setter ----------
- 2013-11-28 14:54:08.393 a.out[76538:507] Priv getter
- 2013-11-28 14:54:08.393 a.out[76538:507] Priv setter
- 2013-11-28 14:54:08.394 a.out[76538:507] Priv getter
- 2013-11-28 14:54:08.394 a.out[76538:507] Observer stuff working
- 2013-11-28 14:54:08.394 a.out[76538:507] Priv getter
- 2013-11-28 14:54:08.395 a.out[76538:507] Sakura Kinomoto has earned a card! Cards now: 22
- 2013-11-28 14:54:08.395 a.out[76538:507] ------------ setValue ----------
- 2013-11-28 14:54:08.396 a.out[76538:507] Priv getter
- 2013-11-28 14:54:08.396 a.out[76538:507] Priv setter
- 2013-11-28 14:54:08.397 a.out[76538:507] Priv getter
- 2013-11-28 14:54:08.397 a.out[76538:507] Observer stuff working
- 2013-11-28 14:54:08.398 a.out[76538:507] Priv getter
- 2013-11-28 14:54:08.398 a.out[76538:507] Sakura Kinomoto has earned a card! Cards now: 25
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement