Simple KVO example Simple KVO example ios ios

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"]];    }}