這是一個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