martes, 16 de junio de 2015

Relación entre KVC y KVO (Key-Value Coding / Key-Value Object). Relationship between KVC and KVO (Key-Value Coding / Key-Value Object).

//
//  ViewController.m
//  DemoKVC
//  Relación entre KVC y KVO
//  Created by eduardo fulgencio on 16/6/15.
//  Copyright (c) 2015 eduardo fulgencio. All rights reserved.
//

// Al final de la página está la definición de la clase Deposito

#import "ViewController.h"
#import "Deposito.h"

@interface ViewController ()
// Declaramos dos objetos de tipo Deposito
@property (nonatomic, strong) Deposito *depositoAgua;
@property (nonatomic, strong) Deposito *depositoLeche;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.depositoAgua = [[Deposito alloc] init];
    self.depositoLeche = [[Deposito alloc] init];
    
}

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:NO];
    
    // Asignamos nombre y litros a DepositoAgua
    self.depositoAgua.tipo = @"Agua";
    self.depositoAgua.litros = 10;
    // Asignamos nombre y litros a DepositoLeche
    self.depositoLeche.tipo = @"Leche";
    self.depositoLeche.litros = 5;
    
    // Utilización de KVC Key-Value Coding para generar el mismo valor anterior
    
    [self.depositoAgua setValue:@"Agua" forKey:@"tipo"];
    [self.depositoAgua setValue:[NSNumber numberWithInteger:10] forKey:@"litros"];

     // Relacion KVC y KVO ( Key-Value Observing )
    [self.depositoAgua addObserver:self forKeyPath:@"litros" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
  
    // Aumentamos en 1 litro los litros del deposito agua
    [self.depositoAgua setValue:[NSNumber numberWithInteger:11] forKey:@"litros"];
}


// En cuanto se produza un cambio en los litros del depósito de agua
// este método será llamado
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
    
    if ([keyPath isEqualToString:@"litros"]) {
        NSLog(@"La cantidad de litros ha cambiado.");
        NSLog(@"%@ : ", change);
    }
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end



// ESTA ES LA DEFINICION DE LA CLASE DEPOSITO

/* Clase deposito 

 #import <Foundation/Foundation.h>

 @interface Deposito : NSObject

 @property (nonatomic, strong) NSString *tipo;

 @property (nonatomic) NSUInteger litros;


 @end

 #import "Deposito.h"

 @implementation Deposito

 - (instancetype)init
 {
 self = [super init];
 if (self) {
 self.tipo = @"";
 self.litros = 0;
 }
 return self;
 }

 @end

 */

No hay comentarios:

Publicar un comentario