Advertisement
Guest User

Untitled

a guest
Nov 28th, 2013
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #import <Foundation/Foundation.h>
  2.  
  3. @interface Character : NSObject
  4. @property (nonatomic, strong) NSString *characterName;
  5. @property (nonatomic, strong) NSNumber *ownedClowCards;
  6. - (void)hasLostClowCard;
  7. - (void)hasGainedClowCard;
  8. @end
  9.  
  10. @implementation Character
  11.  
  12. @synthesize ownedClowCards = _ownedClowCards;
  13.  
  14. - (NSNumber *)ownedClowCards
  15. {
  16.     NSLog(@"Priv getter");
  17.     return _ownedClowCards;
  18. }
  19.  
  20. - (void)setOwnedClowCards:(NSNumber *)newValue
  21. {
  22.     NSLog(@"Priv setter");
  23.     _ownedClowCards = newValue;
  24. }
  25.  
  26. - (void)hasLostClowCard
  27. {
  28.     NSLog(@"%@ has lost a card! Cards now: %@", self.characterName, self.ownedClowCards);
  29. }
  30.  
  31. - (void)hasGainedClowCard
  32. {
  33.     NSLog(@"%@ has earned a card! Cards now: %@", self.characterName, self.ownedClowCards);
  34. }
  35.  
  36. - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
  37. {
  38.     NSLog(@"Observer stuff working");
  39.  
  40.     if ([keyPath isEqualToString:@"ownedClowCards"]) {
  41.         if (change[NSKeyValueChangeNewKey] < change [NSKeyValueChangeOldKey]) {
  42.             [self hasLostClowCard];
  43.         } else {
  44.             [self hasGainedClowCard];
  45.         }
  46.     }
  47. }
  48.  
  49. @end
  50.  
  51.  
  52. int main()
  53. {
  54.     @autoreleasepool {
  55.  
  56.         Character *sakura;
  57.         Character *shaoran;
  58.  
  59.         //Create and give the properties some values with KVC...
  60.  
  61.         sakura = [[Character alloc] init];
  62.         sakura.characterName = @"Sakura Kinomoto";
  63.         sakura.ownedClowCards = @20;
  64.  
  65.         shaoran = [[Character alloc] init];
  66.         shaoran.characterName = @"Li Shaoran";
  67.         shaoran.ownedClowCards = @21;
  68.  
  69.         NSLog(@"%@ has %@ Clow Cards", sakura.characterName, sakura.ownedClowCards);
  70.         NSLog(@"%@ has %@ Clow Cards", shaoran.characterName, shaoran.ownedClowCards);
  71.  
  72.         [sakura addObserver:sakura
  73.                  forKeyPath:@"ownedClowCards"
  74.                     options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
  75.                     context:nil];
  76.  
  77.         NSLog(@"------------  setter  ----------");
  78.         sakura.ownedClowCards = @22;
  79.         NSLog(@"------------ setValue ----------");
  80.         [sakura setValue:[NSNumber numberWithInt:25] forKey:@"ownedClowCards"];
  81.  
  82.         [sakura removeObserver:sakura forKeyPath:@"ownedClowCards"];
  83.     }
  84.     return 0;
  85. }
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95. $ clang -framework Foundation main.m && ./a.out
  96. 2013-11-28 14:54:08.387 a.out[76538:507] Priv setter
  97. 2013-11-28 14:54:08.389 a.out[76538:507] Priv setter
  98. 2013-11-28 14:54:08.390 a.out[76538:507] Priv getter
  99. 2013-11-28 14:54:08.390 a.out[76538:507] Sakura Kinomoto has 20 Clow Cards
  100. 2013-11-28 14:54:08.391 a.out[76538:507] Priv getter
  101. 2013-11-28 14:54:08.391 a.out[76538:507] Li Shaoran has 21 Clow Cards
  102. 2013-11-28 14:54:08.392 a.out[76538:507] ------------  setter  ----------
  103. 2013-11-28 14:54:08.393 a.out[76538:507] Priv getter
  104. 2013-11-28 14:54:08.393 a.out[76538:507] Priv setter
  105. 2013-11-28 14:54:08.394 a.out[76538:507] Priv getter
  106. 2013-11-28 14:54:08.394 a.out[76538:507] Observer stuff working
  107. 2013-11-28 14:54:08.394 a.out[76538:507] Priv getter
  108. 2013-11-28 14:54:08.395 a.out[76538:507] Sakura Kinomoto has earned a card! Cards now: 22
  109. 2013-11-28 14:54:08.395 a.out[76538:507] ------------ setValue ----------
  110. 2013-11-28 14:54:08.396 a.out[76538:507] Priv getter
  111. 2013-11-28 14:54:08.396 a.out[76538:507] Priv setter
  112. 2013-11-28 14:54:08.397 a.out[76538:507] Priv getter
  113. 2013-11-28 14:54:08.397 a.out[76538:507] Observer stuff working
  114. 2013-11-28 14:54:08.398 a.out[76538:507] Priv getter
  115. 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