码迷,mamicode.com
首页 > 其他好文 > 详细

【非凡程序员】 OC第九节课 (KVO的应用)

时间:2015-05-27 23:06:22      阅读:469      评论:0      收藏:0      [点我收藏+]

标签:

这是一个QQ密码登陆地址和密码同时被修改时,通知用户QQ账号出现问题

该题难度主要在于判断监控的两次数据都是被修改的

有两种方案:

①定义一个可变的数组,把每次监控到的新旧数据添加进去,进行对比

②定义一个变量,每修改一次,该变量就自加一次,判断为2时,通知用户

 

(1)main函数
//  main.m
//  QQ被盗
//
//  Created by 非凡程序员 on 15/5/27.
//  Copyright (c) 2015年 非凡程序员. All rights reserved.
//

#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;
}

 (2)Person.m 文件

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

#import "Person.h"

@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

【非凡程序员】 OC第九节课 (KVO的应用)

标签:

原文地址:http://my.oschina.net/u/2366900/blog/420759

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!