ios 개발 - KVO 분석

2965 단어 ios 개발
대상: NSMutableArray 객체에 추가된 내용 수신
 
코드는 다음과 같습니다.
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.dataArray = [NSMutableArray arrayWithObject:@"1"];
    [self addObserver:self forKeyPath:@"dataArray" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];
     
}

 
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    NSLog(@"%@", keyPath);
    NSLog(@"%@", object);
    NSLog(@"%@", change);
}

 
- (IBAction)add:(id)sender
{
    NSArray *addData = [NSArray arrayWithObjects:@"11", @"12", @"13", nil];
    [self.dataArray addObjectsFromArray:addData];
    
    self.dataArray = [NSMutableArray arrayWithObject:@"2"];
}

 
로그 입력:
2013-01-15 16:05:10.120 KVOTest[2199:907] dataArray
2013-01-15 16:05:10.121 KVOTest[2199:907] <ZZTViewController: 0x20846590>
2013-01-15 16:05:10.123 KVOTest[2199:907] {
    kind = 1;
    new =     (
        2
    );
    old =     (
        1,
        11,
        12,
        13
    );
}

 
 
테스트를 통해 다음과 같은 결론을 얻었다. kvo는 대상 지침의 변동을 감청하고 NSString, int,float 등 대상의 변동(abc=@'123', abc=12, abc=12.2)은 모두 지침의 변동이기 때문에 이 방식을 통해array의 변화를 포착하는 것은 불가능하다.
 
단, 우리는 이 방식을 통해 컨트롤 속성의 변동을 할 수 있다.다음과 같습니다.
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.personObject = [PersonObject personObjectWithBankInstance:[BankObject bankObjectWithAccountBalance:10]];
    
    [self.personObject addObserver:self forKeyPath:@"bankInstance.accountBalance" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:NULL];    //        personObject    bankInstance accountBalance  
}

 
- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    NSLog(@"%@", keyPath);
    NSLog(@"%@", object);
    NSLog(@"%@", change);
}

 
- (IBAction)add:(id)sender
{
    [self.personObject.bankInstance setAccountBalance:2111];
}

출력 로그:
2013-01-15 16:05:10.111 KVOTest[2199:907] bankInstance.accountBalance
2013-01-15 16:05:10.116 KVOTest[2199:907] <PersonObject: 0x20856180>
2013-01-15 16:05:10.118 KVOTest[2199:907] {
    kind = 1;
    new = 2111;
    old = 10;
}

 
만약 문제가 있으면 메시지를 남겨서 공동으로 토론해 주십시오.

좋은 웹페이지 즐겨찾기