Simple KVO example
KVO works with setter and getter and in incNumber
you are directly accessing iVar so instead of that use self.number
- (IBAction)incNumber:(id)sender{ self.number++; NSLog(@"%d", self.number);}
Rather than:
_number++;
Try:
[self willChangeValueForKey:@"number"];_number++;[self didChangeValueForKey:@"number"];
or ever better just:
self.number++
And let the system take care of the willChangeValueForKey:
and didChangeValueForKey:
methods.
@interface TraineeLocationCell : UIView@property (strong, nonatomic) NSString *traineeAddress;@end@implementation// in textview delgate method i am setting traineeAddress string value- (void)textViewDidEndEditing:(UITextView *)textView{ if (textView.text.length >0) [self setValue:textView.text forKey:@"traineeAddress"];}@end
and in other class where i am using this class
TraineeLocationCell *locationView;//create object here [locationView addObserver:self forKeyPath:@"traineeAddress" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];//observing the key in this class
//this is the delegate method which take care of value is changed or not
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{ if([keyPath isEqualToString:@"traineeAddress"]){ if (!settingsValues.address) settingsValues.address = [[NSMutableArray alloc]initWithObjects:[change valueForKey:@"new"], nil]; else [settingsValues.address replaceObjectAtIndex:0 withObject:[change valueForKey:@"new"]]; }}