【非凡程序員】 OC第十節課 (KVO的應用二 QQ密碼被盜)

這是一個QQ密碼登錄地址和密碼同時被修改時,通知用戶QQ帳號出現問題程序員

該題難度主要在於判斷監控的兩次數據都是被修改的數組

有兩種方案:安全

①定義一個可變的數組,把每次監控到的新舊數據添加進去,進行對比函數

②定義一個變量,每修改一次,該變量就自加一次,判斷爲2時,通知用戶ui

 

(1)main函數
//  main.m
//  QQ被盜
//
//  Created by 非凡程序員 on 15/5/27.
//  Copyright (c) 2015年 非凡程序員. All rights reserved.
//spa

#import <Foundation/Foundation.h>
#import "Person.h"
#import "QQ.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
       
        Person * suiping =[[Person alloc]init];
        [suiping setValue:@"歲平" forKey:@"name"];
       
        QQ * qq=[[QQ alloc]init];
        [qq setValue:@"574829290" forKey:@"number"];
        [qq setValue:@"mimaaaaa" forKey:@"passworld"];
        [qq  setValue:@"西安" forKey:@"location"];
        //給該可變數組分配長度
        suiping.array=[NSMutableArray arrayWithCapacity:10];
        [suiping setValue:qq forKey:@"qq"];
        //註冊
        [qq addObserver:suiping forKeyPath:@"passworld" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
        [qq addObserver:suiping forKeyPath:@"location" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
        //改值
        [qq setValue:@"hahhah" forKey:@"passworld"];
//      [qq setValue:@"hahhah" forKey:@"passworld"];
        [qq setValue:@"西安" forKey:@"location"];
        //移除
        [qq removeObserver:suiping forKeyPath:@"passworld"];
        [qq removeObserver:suiping forKeyPath:@"location"];
    }
    return 0;
}code

 (2)Person.m 文件server

//
//  Person.m
//  QQ被盜
//
//  Created by 非凡程序員 on 15/5/27.
//  Copyright (c) 2015年 非凡程序員. All rights reserved.
//ip

#import "Person.h"ci

@implementation Person

//回調

-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
 
    NSString *xin=[change valueForKeyPath:NSKeyValueChangeNewKey];
    NSString *old=[change valueForKeyPath:NSKeyValueChangeOldKey];

    //給可變數組添加元素
    [_array addObject:xin];
    [_array addObject:old];

   //第一種方案  (重點)
    //判斷
    if ([_array count]==4) {
        if ([_array[0] isEqualToString: _array[1]] ||  [_array[2] isEqualToString: _array[3]]) {
            NSLog(@"安全");
        }
        else
        {
            NSLog(@"危險");
        }
    }
    //第二種方案   (重點)
//    if ([xin isEqualToString: old])
//    {
//        NSLog(@"QQ安全");
//    }
//    else
//    {
//        self.error++;
//        if (self.error==2)
//        {
//            NSLog(@"有人異地(%@)修改密碼,請注意",xin);
//        }
//    }
//   
   
}

@end

相關文章
相關標籤/搜索