Simple KVO example

前端 未结 3 2045
陌清茗
陌清茗 2021-02-05 02:01

I am trying to do simple KVO example, but I am having problems.

This is my *.m file:

#import \"KVO_ViewController.h\"

@interface KVO_ViewController (         


        
相关标签:
3条回答
  • 2021-02-05 02:13

    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.

    0 讨论(0)
  • 2021-02-05 02:15

    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);
    }
    
    0 讨论(0)
  • 2021-02-05 02:24
    @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"]];
        }
    }
    
    0 讨论(0)
提交回复
热议问题